私は次のgawk
コマンドを試しました。
# gawk 'BEGIN{
> var["a"] = 1
> var["g"] = 2
> var["m"] = 3
> var["u"] = 4
> asort(var, test)
> for (i in test)
> print "Index:",i," - value:",test[i]
> }'
次のような出力が得られます。
インデックス:4 - 値:4
インデックス:1 - 値:1
インデックス: 2 - 値: 2
インデックス:3 - 値:3
それで、出力が次のような順序にならない理由が気になります。
索引: 1
索引: 2
...
これは配列値の正しい順序であるためです。
ベストアンサー1
for (var in array)
配列要素にアクセスする順序は保証されません。
ループはメモリに格納されている各要素を繰り返しますが、次の要素を保存している間にawkがメモリに穴を挿入することを決定すると、「奇妙な」順序が発生します。
ちなみに、これは公式文書で説明されています。 https://www.gnu.org/software/gawk/manual/html_node/Scanning-an-Array.html#index-for-statement-1
したがって、保証されたソート配列が必要な場合は、次の方法を使用する必要があります。
element_count = asort(var, test)
for (i=1; i<=element_count; i++)
print "Index:",i," - value:",test[i]