我做的顺序,如何设置的for循环
$ awk '{ a[$0] } END{for (i in a)print i }' <(echo -e "bar\nfoo")
foo
bar
我也尝试过其他的输入文件,以及这些for循环运行的顺序似乎是随机的。
你怎么给AWK说:保持秩序的文件中,所以这里应该是,
bar
foo
感谢,
埃里克J.
我做的顺序,如何设置的for循环
$ awk '{ a[$0] } END{for (i in a)print i }' <(echo -e "bar\nfoo")
foo
bar
我也尝试过其他的输入文件,以及这些for循环运行的顺序似乎是随机的。
你怎么给AWK说:保持秩序的文件中,所以这里应该是,
bar
foo
感谢,
埃里克J.
你需要跟踪您自己的订单。在这种情况下,这很简单,只要:
awk '{a[NR] = $0} END { for(i=1; i<= NR; i++) print a[i]}'
在AWK的阵列是关联的,所以索引到阵列可以是任意字符串。因此,索引上没有自然顺序,因此(i in a)
语法按实现确定的顺序返回索引。也就是说,该语言不会对订单强加一个要求,并且实现使用任何想要存储数据的数据结构,并以最方便的方式遍历数据结构。所以不同版本的awk可能会给出不同的顺序。顺序不是随机的,但如果不理解底层实现,则不能轻松进行预测。通过使用整数作为索引,您可以控制订单。
请参阅@ WilliamPursell针对此特定案例的回答,还请参阅GNU awk手册(http://www.gnu.org/software/gawk/manual/gawk.html#Controlling-Array-Traversal)了解如何设置in
运算符的评估顺序。
在这里看... http://stackoverflow.com/questions/3113057/how-can-i-reorder-a-file-by-ascending-order-column – ctasca