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 gawkextensã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 comprintque sejam vistos como argumentos separados.