web-dev-qa-db-ja.com

awk配列のすべてのコンテンツを表示する方法は?

私の理解では、awk配列はpython dictのようなものです。

だから私はそれを探るために以下のコードを書き留めます:

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

そして私は得ました:awk: can't read value of my_dict; it's an array name.

最初の列は数値ではないので、配列の全内容を読み取ったり、トラバースしたりするにはどうすればよいですか?

47
Zen

配列のキーをループして、対応する値を抽出できます。

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

これは、キーの種類に関係なく機能します。

67
Stephen Kitt

それは配列をループします:

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

iはインデックスです。

16
chaos

awkの配列は、Pythonの辞書のようなファーストクラスオブジェクトではありません。 awkでは、添え字のない配列名は 2つのコンテキスト でのみ使用できます:

  • 関数定義または関数呼び出しのパラメーター。
  • キーワードinに続く名前トークン。

他のコンテキストでは、awkはエラーを発生させます。

配列の内容を反復して出力するには、forループが必要です。

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