有人能解释一下这种行为吗?
$ echo "A_B_C_D" | awk '{split($0,a,"_"); for (i in a) {print i,a[i]}}'
2 B
3 C
4 D
1 A
与
相同$ awk '{split("A_B_C_D",a,"_"); for (i in a) {print i,a[i]}}' empty
2 B
3 C
4 D
1 A
其中empty是包含一行的文件。
然而,这有效:
$ echo "A_B_C_D" | awk '{n=split($0,a,"_"); for (i=1;i<=n;i++) {print i,a[i]}}'
1 A
2 B
3 C
4 D
由于
答案 0 :(得分:2)
man awk
并查找in
运算符。如果要使用in
运算符控制输出顺序,可以通过填充PROCINFO["sorted_in"]
来使用GNU awk。有关详细信息,请参阅http://www.gnu.org/software/gawk/manual/gawk.html#Controlling-Array-Traversal。
答案 1 :(得分:0)
感谢@fedorqui,答案已经被问到here:
这是满足我好奇心的最佳答案:
来自8. Arrays in awk --> 8.5 Scanning All Elements of an Array 引用for(数组中的值)时的GNU Awk用户指南(gawk 3.1.0) 语法:
此语句访问数组元素的顺序 由阵列的内部排列决定 awk中的元素,无法控制或更改。这可能导致 如果新元素被添加到数组中的语句中的问题 循环体;不能预测for循环是否会 到达他们。类似地,改变循环内部的var可能会产生 奇怪的结果。最好避免这样的事情。
当循环遍历dict.keys()时,它就像python字典,不是吗?