Щоб розділити рядок на масив, awk
ми використовуємо функцію split()
:
awk '{split($0, a, ":")}'
# ^^ ^ ^^^
# | | |
# string | delimiter
# |
# array to store the pieces
Якщо роздільник не вказаний, він використовує те FS
, що за замовчуванням пробіл:
$ awk '{split($0, a); print a[2]}' <<< "a:b c:d e"
c:d
Ми можемо дати роздільник, наприклад :
:
$ awk '{split($0, a, ":"); print a[2]}' <<< "a:b c:d e"
b c
Що еквівалентно встановленню через FS
:
$ awk -F: '{split($0, a); print a[1]}' <<< "a:b c:d e"
b c
У gawk ви також можете надати роздільник як регулярний вираз:
$ awk '{split($0, a, ":*"); print a[2]}' <<< "a:::b c::d e" #note multiple :
b c
І навіть подивіться, який роздільник був на кожному кроці, використовуючи його четвертий параметр:
$ awk '{split($0, a, ":*", sep); print a[2]; print sep[1]}' <<< "a:::b c::d e"
b c
:::
Процитуємо сторінку чоловіка GNU awk :
split (рядок, масив [, fieldsep [, seps]])
Розділіть рядок на частини, розділені на поле fieldsep, і збережіть фрагменти в масиві, а розділові рядки в масиві seps . Перший шматок зберігається array[1]
, другий - array[2]
тощо. Значення рядка третього аргументу, fieldsep , являє собою регулярний вираз, який описує, де розділити рядок (наскільки FS може бути регулярним виразом, що описує, де розділити записи вводу). Якщо поле поле пропущено, використовується значення FS . split()
повертає кількість створених елементів. seps - це gawk
розширення, між seps[i]
яким знаходиться рядок розділенняarray[i]
і array[i+1]
. Якщо fieldsep - це єдиний простір, то будь-який провідний пробіл переходить у seps[0]
будь-який пробільний пробіл seps[n]
, де n - повернене значення split()
(тобто кількість елементів у масиві).
OFS
, вставте коми між ними, змушуючиprint
бачити їх окремими аргументами.