Bagaimana cara melihat semua konten dalam array awk?

41

Dalam pemahaman saya, array awk adalah sesuatu seperti dict python.

Jadi saya menuliskan kode di bawah ini untuk menjelajahinya:

awk '{my_dict[$1] = $2} END { print my_dict}' zen

Dan saya mendapat: awk: can't read value of my_dict; it's an array name.

Karena kolom pertama bukan nomor, bagaimana saya bisa membaca total konten array atau melewatinya?

Zen
sumber

Jawaban:

60

Anda dapat mengulangi kunci array dan mengekstrak nilai yang sesuai:

awk '{my_dict[$1] = $2} END { for (key in my_dict) { print my_dict[key] } }' zen

Untuk mendapatkan hasil yang mirip dengan yang Anda dapatkan dengan kamus Python, Anda juga dapat mencetak kunci:

awk '{my_dict[$1] = $2} END { for (key in my_dict) { print key ": " my_dict[key] } }' zen

Ini berfungsi terlepas dari jenis kuncinya.

Stephen Kitt
sumber
14

Itu akan mengulang melalui array:

END { for (i in my_dict) print my_dict[i] }

i adalah indeks.

kekacauan
sumber
9

Array awkbukan objek kelas satu seperti kamus di Python. Dalam awk, nama array tanpa subskrip hanya dapat digunakan dalam dua konteks :

  • Parameter dalam definisi fungsi atau panggilan fungsi.
  • Token nama setelah kata kunci in.

Dalam konteks lain, awkakan memunculkan kesalahan.

Anda perlu forperulangan untuk mengulang dan mencetak konten array:

$ echo 1 2 | awk '{my_dict[$1] = $2};END {for(i in my_dict) print my_dict[i]}'
2
cuonglm
sumber