Отсортируйте ассоциативный массив в awk

У меня есть ассоциативный массив в awk, который заполняется как это:

chr_count[$3]++

Когда я пытаюсь распечатать мой chr_counts, Я использую это:

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

Но не удивительно, порядок я не отсортирован всегда. Есть ли простой способ выполнить итерации по отсортированным ключам chr_count?

20
задан codeforester 9 June 2017 в 17:23
поделиться

2 ответа

Вместо asort используйте asorti (source, destination) , который сортирует индексы в новый массив, и вы выиграли » t нужно скопировать массив.

Затем вы можете использовать целевой массив как указатели на исходный массив.

В вашем примере вы могли бы использовать его так:

n=asorti(chr_count, sorted)
for (i=1; i<=n; i++) {
        print sorted[i] " : " chr_count[sorted[i]]
}
28
ответ дан 29 November 2019 в 23:06
поделиться

Это взято непосредственно из документации :

 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
 }
4
ответ дан 29 November 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: