lon*_*r21 20 arrays sorting awk associative
我在awk中有一个关联数组,它被填充如下:
chr_count[$3]++
Run Code Online (Sandbox Code Playgroud)
当我尝试打印我的时候chr_counts,我用这个:
for (i in chr_count) {
print i,":",chr_count[i];
}
Run Code Online (Sandbox Code Playgroud)
但毫不奇怪,i的顺序没有以任何方式排序.是否有一种简单的方法来迭代排序的键chr_count?
Pau*_*ce. 28
使用asorti(source, destination)将索引排序到新数组中而不是asort,您将不必复制数组.
然后,您可以使用目标数组作为源数组的指针.
对于您的示例,您可以像这样使用它:
n=asorti(chr_count, sorted)
for (i=1; i<=n; i++) {
print sorted[i] " : " chr_count[sorted[i]]
}
Run Code Online (Sandbox Code Playgroud)
小智 12
你可以使用sort命令.例如
for ( i in data )
print i ":", data[i] | "sort"
Run Code Online (Sandbox Code Playgroud)
我最近遇到了这个问题,发现使用 gawk 我可以设置 的值PROCINFO["sorted_in"]来控制迭代顺序。我通过在线搜索 PROCINFO 找到了一个有效值列表,并登陆了这个 GNU Awk 用户指南页面:https ://www.gnu.org/software/gawk/manual/html_node/Controlling-Scanning.html
这列出了表单的选项@{ind|val}_{num|type|str}_{asc|desc}:
ind按键(索引)val排序和按值排序。num按数字、str字符串和type指定类型排序。asc用于升序和desc降序。我只是用:
PROCINFO["sorted_in"] = "@val_num_desc"
for (i in map) print i, map[i]
Run Code Online (Sandbox Code Playgroud)
并且输出按值的降序排序。
这是直接取自文档:
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
}
Run Code Online (Sandbox Code Playgroud)