Pour diviser une chaîne en un tableau, awk
nous utilisons la fonction split()
:
awk '{split($0, a, ":")}'
# ^^ ^ ^^^
# | | |
# string | delimiter
# |
# array to store the pieces
Si aucun séparateur n'est donné, il utilise le FS
, qui par défaut est l'espace:
$ awk '{split($0, a); print a[2]}' <<< "a:b c:d e"
c:d
On peut donner un séparateur, par exemple :
:
$ awk '{split($0, a, ":"); print a[2]}' <<< "a:b c:d e"
b c
Ce qui équivaut à le définir via FS
:
$ awk -F: '{split($0, a); print a[1]}' <<< "a:b c:d e"
b c
Dans gawk, vous pouvez également fournir le séparateur en tant qu'expression régulière:
$ awk '{split($0, a, ":*"); print a[2]}' <<< "a:::b c::d e" #note multiple :
b c
Et même voir quel était le délimiteur à chaque étape en utilisant son quatrième paramètre:
$ awk '{split($0, a, ":*", sep); print a[2]; print sep[1]}' <<< "a:::b c::d e"
b c
:::
Citons la page de manuel de GNU awk :
split (chaîne, tableau [, fieldsep [, seps]])
Divisez la chaîne en morceaux séparés par fieldsep et stockez les morceaux dans le tableau et les chaînes de séparation dans le tableau seps . La première pièce est stockée array[1]
, la deuxième pièce array[2]
, et ainsi de suite. La valeur de chaîne du troisième argument, fieldsep , est une expression rationnelle décrivant où diviser la chaîne (tout comme FS peut être une expression rationnelle décrivant où diviser les enregistrements d'entrée). Si fieldsep est omis, la valeur de FS est utilisée. split()
renvoie le nombre d'éléments créés. seps est une gawk
extension, seps[i]
étant la chaîne de séparation entrearray[i]
et array[i+1]
. Si fieldsep est un espace unique, alors tout espace blanc de début entre dans seps[0]
et tout espace blanc de fin entre seps[n]
, où n est la valeur de retour de split()
(c'est-à-dire le nombre d'éléments dans le tableau).
OFS
, placez des virgules entre eux, pour lesprint
voir comme des arguments séparés.