วิธีดูเนื้อหาทั้งหมดในอาเรย์ awk?


41

ในความเข้าใจของฉันอาร์เรย์ awk เป็นสิ่งที่คล้ายกับหลามพจน์

ดังนั้นฉันจึงเขียนรหัสตะโกนเพื่อสำรวจ:

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

และฉันได้รับ: awk: can't read value of my_dict; it's an array name.

เนื่องจากคอลัมน์แรกคือหมายเลข `ฉันจะอ่านเนื้อหาทั้งหมดของอาเรย์หรือสำรวจได้อย่างไร?

คำตอบ:


60

คุณสามารถวนซ้ำคีย์ของอาร์เรย์และแยกค่าที่เกี่ยวข้อง:

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

เพื่อให้ได้ผลลัพธ์ที่คล้ายกับที่คุณได้รับจากพจนานุกรม Python คุณสามารถพิมพ์รหัสได้เช่นกัน:

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

สิ่งนี้ใช้ได้โดยไม่คำนึงถึงประเภทของคีย์



8

อาร์เรย์ไม่ได้เป็นวัตถุชั้นแรกเหมือนในพจนานุกรมawk Pythonในawkชื่ออาร์เรย์ที่ไม่มีตัวห้อยสามารถใช้ได้ในสองบริบทเท่านั้น :

  • พารามิเตอร์ในนิยามฟังก์ชันหรือการเรียกใช้ฟังก์ชัน
  • ชื่อ token inหลังคำหลัก

ในบริบทอื่นawkจะทำให้เกิดข้อผิดพลาด

คุณต้องforวนซ้ำเพื่อทำซ้ำและพิมพ์เนื้อหาของอาเรย์:

$ echo 1 2 | awk '{my_dict[$1] = $2};END {for(i in my_dict) print my_dict[i]}'
2
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.