Untuk membagi string ke array di awk
kita menggunakan fungsi split()
:
awk '{split($0, a, ":")}'
# ^^ ^ ^^^
# | | |
# string | delimiter
# |
# array to store the pieces
Jika tidak ada pemisah yang diberikan, ia menggunakan FS
, yang default ke spasi:
$ awk '{split($0, a); print a[2]}' <<< "a:b c:d e"
c:d
Kami dapat memberikan pemisah, misalnya :
:
$ awk '{split($0, a, ":"); print a[2]}' <<< "a:b c:d e"
b c
Yang setara dengan mengaturnya melalui FS
:
$ awk -F: '{split($0, a); print a[1]}' <<< "a:b c:d e"
b c
Di gawk Anda juga dapat menyediakan pemisah sebagai regexp:
$ awk '{split($0, a, ":*"); print a[2]}' <<< "a:::b c::d e" #note multiple :
b c
Dan bahkan melihat apa pembatas pada setiap langkah dengan menggunakan parameter keempatnya:
$ awk '{split($0, a, ":*", sep); print a[2]; print sep[1]}' <<< "a:::b c::d e"
b c
:::
Mari kutip halaman manual GNU awk :
split (string, array [, fieldsep [, seps]])
Membagi string menjadi potongan-potongan yang dipisahkan oleh fieldsep dan menyimpan potongan-potongan dalam array dan string pemisah dalam array seps . Potongan pertama disimpan array[1]
, potongan kedua masuk array[2]
, dan sebagainya. Nilai string dari argumen ketiga, fieldsep , adalah regexp yang menggambarkan di mana untuk membagi string (sebanyak FS dapat menjadi regexp yang menggambarkan di mana untuk membagi catatan input). Jika fieldsep dihilangkan, nilai FS digunakan. split()
mengembalikan jumlah elemen yang dibuat. September adalah gawk
ekstensi, dengan seps[i]
menjadi string pemisah antaraarray[i]
dan array[i+1]
. Jika fieldsep adalah ruang tunggal, maka setiap spasi putih terkemuka masuk ke seps[0]
dan spasi spasi tambahan apa pun masuk ke dalam seps[n]
, di mana n adalah nilai balik split()
(yaitu, jumlah elemen dalam array).
OFS
, koma tetap di antara mereka, menjadikannyaprint
sebagai argumen yang terpisah.