25

awk に連想配列があり、次のように入力されます。

chr_count[$3]++

を印刷しようとするとchr_counts、これを使用します。

for (i in chr_count) {
    print i,":",chr_count[i];
}

しかし当然のことながら、 i の順序はまったくソートされていません。のソートされたキーを反復処理する簡単な方法はありますchr_countか?

4

5 に答える 5

33

asort の代わりに、インデックスを新しい配列にソートする whichを使用するasorti(source, destination)と、配列をコピーする必要がなくなります。

次に、宛先配列をソース配列へのポインタとして使用できます。

あなたの例では、次のように使用します。

n=asorti(chr_count, sorted)
for (i=1; i<=n; i++) {
        print sorted[i] " : " chr_count[sorted[i]]
}
于 2010-03-16T21:56:33.750 に答える
13

sort コマンドを使用できます。例えば

for ( i in data )
 print i ":", data[i]  | "sort"
于 2013-12-23T08:14:12.497 に答える
9

asort()asorti()は gawk に固有のものであり、awk には不明であることに注意してください。普通の awk の場合は、自分でロールするsort()か、他の場所から入手できます。

于 2012-12-18T14:28:44.780 に答える
6

これはドキュメントから直接取得されます:

 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
 }
于 2010-03-16T21:47:35.657 に答える