awk に連想配列があり、次のように入力されます。
chr_count[$3]++
を印刷しようとするとchr_counts
、これを使用します。
for (i in chr_count) {
print i,":",chr_count[i];
}
しかし当然のことながら、 i の順序はまったくソートされていません。のソートされたキーを反復処理する簡単な方法はありますchr_count
か?
awk に連想配列があり、次のように入力されます。
chr_count[$3]++
を印刷しようとするとchr_counts
、これを使用します。
for (i in chr_count) {
print i,":",chr_count[i];
}
しかし当然のことながら、 i の順序はまったくソートされていません。のソートされたキーを反復処理する簡単な方法はありますchr_count
か?
asort の代わりに、インデックスを新しい配列にソートする whichを使用するasorti(source, destination)
と、配列をコピーする必要がなくなります。
次に、宛先配列をソース配列へのポインタとして使用できます。
あなたの例では、次のように使用します。
n=asorti(chr_count, sorted)
for (i=1; i<=n; i++) {
print sorted[i] " : " chr_count[sorted[i]]
}
sort コマンドを使用できます。例えば
for ( i in data )
print i ":", data[i] | "sort"
asort()
とasorti()
は gawk に固有のものであり、awk には不明であることに注意してください。普通の awk の場合は、自分でロールするsort()
か、他の場所から入手できます。
これはドキュメントから直接取得されます:
populate the array data
# copy indices
j = 1
for (i in data) {
ind[j] = i # index value becomes element value
j++
}
n = asort(ind) # index values are now sorted
for (i = 1; i <= n; i++) {
do something with ind[i] Work with sorted indices directly
...
do something with data[ind[i]] Access original array via sorted indices
}