AWK 的数组语法

AWK 的数组语法

我对这些脚本的反应感到困惑。

试验一:

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.

为什么是指数数组存储为实际值?

为什么二审就出问题了?

答案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.

相关内容