Para dividir uma string em uma matriz awk
, usamos a função split()
:
awk '{split($0, a, ":")}'
# ^^ ^ ^^^
# | | |
# string | delimiter
# |
# array to store the pieces
Se nenhum separador for fornecido, ele usará o FS
, que assume como padrão o espaço:
$ awk '{split($0, a); print a[2]}' <<< "a:b c:d e"
c:d
Podemos dar um separador, por exemplo :
:
$ awk '{split($0, a, ":"); print a[2]}' <<< "a:b c:d e"
b c
O que equivale a defini-lo através do FS
:
$ awk -F: '{split($0, a); print a[1]}' <<< "a:b c:d e"
b c
No gawk, você também pode fornecer o separador como um regexp:
$ awk '{split($0, a, ":*"); print a[2]}' <<< "a:::b c::d e" #note multiple :
b c
E até veja o que o delimitador estava em cada etapa usando seu quarto parâmetro:
$ awk '{split($0, a, ":*", sep); print a[2]; print sep[1]}' <<< "a:::b c::d e"
b c
:::
Vamos citar a página de manual do GNU awk :
split (string, array [, fieldsep [, seps]])
Divida a sequência em partes separadas por fieldsep e armazene as partes na matriz e as seqüências separadoras na matriz seps . A primeira peça é armazenada array[1]
, a segunda peça array[2]
e assim por diante. O valor da string do terceiro argumento, fieldsep , é um regexp que descreve onde dividir a string (da mesma forma que o FS pode ser um regexp que descreve onde dividir os registros de entrada). Se fieldsep for omitido, o valor de FS é usado. split()
retorna o número de elementos criados. seps é uma gawk
extensão, seps[i]
sendo a string separadora entrearray[i]
e array[i+1]
. Se fieldsep for um espaço único, qualquer espaço em branco à esquerda entrará seps[0]
e qualquer espaço em branco à direita entrará seps[n]
, onde n é o valor de retorno de split()
(ou seja, o número de elementos na matriz).
OFS
, coloque vírgulas entre eles, fazendo comprint
que sejam vistos como argumentos separados.