Щоб розділити рядок на масив, 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бачити їх окремими аргументами.