Para dividir una cadena en una matriz awk
, utilizamos la función split()
:
awk '{split($0, a, ":")}'
# ^^ ^ ^^^
# | | |
# string | delimiter
# |
# array to store the pieces
Si no se proporciona un separador, utiliza el FS
, que por defecto es el espacio:
$ awk '{split($0, a); print a[2]}' <<< "a:b c:d e"
c:d
Podemos dar un separador, por ejemplo :
:
$ awk '{split($0, a, ":"); print a[2]}' <<< "a:b c:d e"
b c
Lo que es equivalente a configurarlo a través de FS
:
$ awk -F: '{split($0, a); print a[1]}' <<< "a:b c:d e"
b c
En gawk también puede proporcionar el separador como una expresión regular:
$ awk '{split($0, a, ":*"); print a[2]}' <<< "a:::b c::d e" #note multiple :
b c
E incluso vea cuál era el delimitador en cada paso utilizando su cuarto parámetro:
$ awk '{split($0, a, ":*", sep); print a[2]; print sep[1]}' <<< "a:::b c::d e"
b c
:::
Citemos la página de manual de GNU awk :
split (cadena, matriz [, fieldsep [, seps]])
Dividir cadena en piezas separadas por fieldsep y almacene las piezas en la matriz y las cadenas de separación en la matriz de seps . La primera pieza se almacena en array[1]
, la segunda pieza en array[2]
, y así sucesivamente. El valor de cadena del tercer argumento, fieldsep , es una expresión regular que describe dónde dividir la cadena (del mismo modo que FS puede ser una expresión regular que describe dónde dividir los registros de entrada). Si se omite fieldsep , se utiliza el valor de FS . split()
Devuelve el número de elementos creados. seps es una gawk
extensión, seps[i]
siendo la cadena de separación entrearray[i]
y array[i+1]
. Si fieldsep es un espacio único, entonces cualquier espacio en blanco inicial entraseps[0]
y cualquier espacio en blanco final entra seps[n]
, donde n es el valor de retorno de split()
(es decir, el número de elementos en la matriz).
OFS
, pegue comas entre ellos, haciéndolosprint
ver como argumentos separados.