AWKの配列構文

AWKの配列構文

このスクリプトに対する反応は混乱しています。

テスト1:

awk '{line_arr[$0] } END {for (line in line_arr) print line}' text_file

出力:

1
2
3
4

テスト2:

awk '{line_arr[$0] } END {for (line in line_arr) print line}' text_file

出力:

is some text.
Hello. Here
Lots of random
text.

文書の内容:

$ cat text_file
Hello. Here
is some text.
Lots of random
text.

なぜ?索引実際の値として保存された配列?

2回目の裁判では、なぜ問題が発生したのですか?

答え1

このまれな構文を使用してawk行を連想配列。したがって、定義された順序はありません。未定義の動作に達しました。

説得する方法は次のとおりです。連想配列自体の行番号を印刷します。

$ awk '{line_arr[$0]=NR } END \
       {for (line in line_arr) print line_arr[line]"=>"line } \
      ' text_file

3=>Lots of random
1=>Hello. Here
4=>text.
2=>is some text.

関連情報