Wie kann ich den gesamten Inhalt eines awk-Arrays anzeigen?

41

Nach meinem Verständnis ist awk array so etwas wie ein Python-Diktat.

Also schreibe ich den folgenden Code auf, um ihn zu untersuchen:

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

Und ich habe: awk: can't read value of my_dict; it's an array name.

Wie kann ich den Gesamtinhalt des Arrays lesen oder durchlaufen, da die erste Spalte keine Zahl ist?

Zen
quelle

Antworten:

60

Sie können die Schlüssel des Arrays durchlaufen und die entsprechenden Werte extrahieren:

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

Um eine Ausgabe ähnlich der eines Python-Wörterbuchs zu erhalten, können Sie auch den Schlüssel drucken:

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

Dies funktioniert unabhängig vom Schlüsseltyp.

Stephen Kitt
quelle
14

Das würde das Array durchlaufen:

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

i ist der Index.

Chaos
quelle
8

Array in awkist kein erstklassiges Objekt wie Dictionary in Python. In awkkann ein Arrayname ohne Index nur in zwei Kontexten verwendet werden :

  • Ein Parameter in einer Funktionsdefinition oder einem Funktionsaufruf.
  • Token nach Schlüsselwort benennen in.

In einem anderen Kontext awkwird ein Fehler ausgelöst.

Sie benötigen eine forSchleife, um den Inhalt eines Arrays zu iterieren und zu drucken:

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