对于使用awk以相同方式填充的两个数组,元素的顺序是否相同?

对于使用awk以相同方式填充的两个数组,元素的顺序是否相同?,awk,Awk,其中一个我收集了字段值,并将它们用作两个关联数组的键 awk '{a[$2]++;b[$2]++} END { for(i in a) printf "a : %s\n", i ; for(i in b) printf "b : %s\n", i }' some_file.txt 我假设这两个数组的键将以相同的顺序访问,因为它们是完全相同的集合 以下描述了awk的行为: 此语句访问数组元素的顺序由数组元素在

其中一个我收集了字段值,并将它们用作两个关联数组的键

awk '{a[$2]++;b[$2]++}
     END {
       for(i in a) printf "a : %s\n", i ;
       for(i in b) printf "b : %s\n", i
     }' some_file.txt
我假设这两个数组的键将以相同的顺序访问,因为它们是完全相同的集合

以下描述了awk的行为:

此语句访问数组元素的顺序由数组元素在awk中的内部排列决定,并且在标准awk中不能控制或更改

所以我理解这个顺序是无法预测的,但这就是说它不会是确定性的和上下文无关的吗


更新。鉴于已接受的答案,我编辑了my以适应awk的行为。

这将是确定性的,因为In运算符访问的索引顺序对于1个数组始终相同,但您不能假设1个数组的元素的遍历顺序与另一个数组的相同,即使这些元素相同,并且以相同的顺序插入,因为数组元素的存储方式取决于实现,并且我们知道存在时间或可用内存,或者该机制的其他一些不明显的方面


如果你需要一个命令,你需要执行这个命令。如果您有类似的数组,并且需要按照索引存储在a中的顺序打印bs值,那么您可以在打印b中为i写入[i]

这将是确定性的,因为in运算符访问的索引顺序对于1个数组总是相同的,但您不能假设1个数组的元素的遍历顺序与另一个数组的相同,即使这些元素相同,并且以相同的顺序插入,因为数组元素的存储方式取决于实现,并且我们知道存在时间或可用内存,或者该机制的其他一些不明显的方面

如果你需要一个命令,你需要执行这个命令。如果您有类似的数组,并且需要按索引存储在a中的顺序打印bs值,那么您可以在打印b[i]中为i写入