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