Сортировка ассоциативного массива в awk
У меня есть ассоциативный массив в awk, который заполняется следующим образом:
chr_count[$3]++
Когда я пытаюсь напечатать мой chr_counts
, я использую это:
for (i in chr_count) {
print i,":",chr_count[i];
}
Но неудивительно, что порядок я не сортируется никоим образом.
Есть ли простой способ перебора отсортированных ключей chr_count
?
Ответы
Ответ 1
Вместо asort используйте asorti(source, destination)
, который сортирует индексы в новый массив, и вам не придется копировать массив.
Затем вы можете использовать целевой массив как указатели в исходном массиве.
В качестве примера вы можете использовать его следующим образом:
n=asorti(chr_count, sorted)
for (i=1; i<=n; i++) {
print sorted[i] " : " chr_count[sorted[i]]
}
Ответ 2
вы можете использовать команду sort. например.
for ( i in data )
print i ":", data[i] | "sort"
Ответ 3
Обратите внимание, что asort()
и asorti()
специфичны для gawk и неизвестны awk. Для простого awk вы можете перевернуть свой собственный sort()
или получить его из другого места.
Ответ 4
Это взято непосредственно из документации:
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
}