Um einen String in ein Array zu teilen, verwenden awk
wir die Funktion split()
:
awk '{split($0, a, ":")}'
# ^^ ^ ^^^
# | | |
# string | delimiter
# |
# array to store the pieces
Wenn kein Trennzeichen angegeben wird, wird das verwendet FS
, das standardmäßig das Leerzeichen verwendet:
$ awk '{split($0, a); print a[2]}' <<< "a:b c:d e"
c:d
Wir können ein Trennzeichen geben, zum Beispiel :
:
$ awk '{split($0, a, ":"); print a[2]}' <<< "a:b c:d e"
b c
Was gleichbedeutend ist mit dem Einstellen durch FS
:
$ awk -F: '{split($0, a); print a[1]}' <<< "a:b c:d e"
b c
In gawk können Sie das Trennzeichen auch als regulären Ausdruck bereitstellen:
$ awk '{split($0, a, ":*"); print a[2]}' <<< "a:::b c::d e" #note multiple :
b c
Und sehen Sie sogar, was der Begrenzer bei jedem Schritt war, indem Sie seinen vierten Parameter verwenden:
$ awk '{split($0, a, ":*", sep); print a[2]; print sep[1]}' <<< "a:::b c::d e"
b c
:::
Zitieren wir die Manpage von GNU awk :
split (string, array [, fieldsep [, seps]])
Teilen Sie die Schnur in durch getrennte Teile Feldsep Teile und speichern Sie die Teile im Array und die Trennzeichenfolgen im Seps- Array. Das erste Stück wird in gespeichert array[1]
, das zweite Stück in array[2]
und so weiter. Der Zeichenfolgenwert des dritten Arguments, fieldsep , ist ein regulärer Ausdruck, der beschreibt, wo die Zeichenfolge aufgeteilt werden soll (ähnlich wie FS ein regulärer Ausdruck sein kann, der beschreibt, wo Eingabedatensätze aufgeteilt werden sollen). Wenn fieldsep weggelassen wird, wird der Wert von FS verwendet. split()
Gibt die Anzahl der erstellten Elemente zurück. seps ist eine gawk
Erweiterung, seps[i]
zwischen der sich die Trennzeichenfolge befindetarray[i]
und array[i+1]
. Wenn fieldsep nachfolgende eingegebenist ein einzelnes Leerzeichen, dann wird jedes führende Leerzeichen seps[0]
und jedes nachfolgende Leerzeichen eingegeben seps[n]
, wobei n der Rückgabewert von split()
(dh die Anzahl der Elemente im Array) ist.
OFS
, setzen Sie Kommas dazwischen, damitprint
sie als separate Argumente angezeigt werden.