Aby podzielić ciąg na tablicę awk, używamy funkcji split():
awk '{split($0, a, ":")}'
# ^^ ^ ^^^
# | | |
# string | delimiter
# |
# array to store the pieces
Jeśli nie podano separatora, używa znaku FS, który domyślnie jest spacją:
$ awk '{split($0, a); print a[2]}' <<< "a:b c:d e"
c:d
Możemy podać separator, na przykład ::
$ awk '{split($0, a, ":"); print a[2]}' <<< "a:b c:d e"
b c
Co jest równoważne ustawieniu go przez FS:
$ awk -F: '{split($0, a); print a[1]}' <<< "a:b c:d e"
b c
W gawk możesz także podać separator jako wyrażenie regularne:
$ awk '{split($0, a, ":*"); print a[2]}' <<< "a:::b c::d e" #note multiple :
b c
A nawet zobacz, jaki separator znajdował się na każdym kroku, używając jego czwartego parametru:
$ awk '{split($0, a, ":*", sep); print a[2]; print sep[1]}' <<< "a:::b c::d e"
b c
:::
Zacytujmy stronę podręcznika systemowego GNU awk :
split (string, array [, fieldsep [, seps]])
Podziel ciąg na części oddzielone sepami pól i zapisz je w tablicy, a ciągi separatorów w tablicy seps . Pierwsza część jest przechowywana array[1], druga część array[2]i tak dalej. Wartość ciągu trzeciego argumentu, sep-pól , jest wyrażeniem regularnym opisującym, gdzie podzielić łańcuch (podobnie jak FS może być wyrażeniem regularnym opisującym, gdzie podzielić rekordy wejściowe). Jeśli pominięto sep-pól , używana jest wartość FS . split()zwraca liczbę utworzonych elementów. seps to agawk rozszerzenie, które seps[i]jest łańcuchem oddzielającym pomiędzyarray[i]i array[i+1]. Jeśli sep-pól jest pojedynczą spacją, to wszelkie początkowe białe spacje trafiają do, seps[0]a wszystkie końcowe spacje przechodzą do seps[n], gdzie n jest wartością zwracaną split()(tj. Liczbą elementów w tablicy).
OFS, wstaw przecinki między nimi, abyprintzobaczyć je jako oddzielne argumenty.