Làm thế nào để xem tất cả nội dung trong một mảng awk?


41

Theo hiểu biết của tôi, mảng awk là một cái gì đó giống như con trăn.

Vì vậy, tôi viết mã dưới đây để khám phá nó:

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

Và tôi đã nhận được: awk: can't read value of my_dict; it's an array name.

Là cột đầu tiên không phải là số, làm thế nào tôi có thể đọc tổng số nội dung của mảng hoặc duyệt qua nó?

Câu trả lời:


60

Bạn có thể lặp qua các khóa của mảng và trích xuất các giá trị tương ứng:

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

Để có đầu ra tương tự như bạn nhận được với một từ điển Python, bạn cũng có thể in khóa:

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

Điều này hoạt động bất kể loại chìa khóa.


14

Điều đó sẽ lặp qua mảng:

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

i là chỉ số.


8

Mảng trong awkkhông phải là đối tượng hạng nhất như từ điển trong Python. Trong awk, tên mảng không có chỉ mục con chỉ có thể sử dụng trong hai ngữ cảnh :

  • Một tham số trong một định nghĩa hàm hoặc gọi hàm.
  • Tên mã thông báo sau từ khóa in.

Trong bối cảnh khác, awksẽ đưa ra một lỗi.

Bạn cần một forvòng lặp để lặp và in nội dung của một mảng:

$ echo 1 2 | awk '{my_dict[$1] = $2};END {for(i in my_dict) print my_dict[i]}'
2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.