首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[“sorted_in”]多维数组排序问题

[“sorted_in”]多维数组排序问题
EN

Stack Overflow用户
提问于 2021-06-20 09:33:54
回答 1查看 405关注 0票数 2
代码语言:javascript
复制
[root@rocky ~]# cat c
a b 1
a c 4
a r 6
a t 2
b a 89
b c 76
a d 45
b z 9
[root@rocky ~]# awk '{a[$1][$2]=$3}END{PROCINFO["sorted_in"]="@val_num_asc";for(i in a){for(x in a[i])print i,x,a[i][x]}}' c
a b 1
a t 2
a c 4
a r 6
a d 45
b z 9
b c 76
b a 89
[root@rocky ~]# awk '{a[$2]=$3}END{PROCINFO["sorted_in"]="@val_num_asc";for(i in a)print i,a[i]}' c
b 1
t 2
r 6
z 9
d 45
c 76
a 89
代码语言:javascript
复制
[root@rocky ~]# awk '{a[$2]=$3}END{PROCINFO["sorted_in"]="@val_num_desc";for(i in a)print i,a[i]}' c
a 89
c 76
d 45
z 9
r 6
t 2
b 1
[root@rocky ~]# awk '{a[$1][$2]=$3}END{PROCINFO["sorted_in"]="@val_num_desc";for(i in a){for(x in a[i])print i,x,a[i][x]}}' c
a d 45
a r 6
a c 4
a t 2
a b 1
b a 89
b c 76
b z 9
代码语言:javascript
复制
[root@rocky ~]# awk --version
GNU Awk 4.2.1, API: 2.0 (GNU MPFR 3.1.6-p2, GNU MP 6.1.2)

使用PROCINFO["sorted_in"]="@val_num_asc"PROCINFO["sorted_in"]="@val_num_desc"对多维数组进行排序存在问题,并且没有真正的排序。一维数组没有问题。有什么问题吗?是因为它不支持多维数组吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-20 10:05:31

代码语言:javascript
复制
awk '{a[$1][$2]=$3}END{PROCINFO["sorted_in"]="@val_num_asc";for(i in a){for(x in a[i])print i,x,a[i][x]}}' c

a b 1
a t 2
a c 4
a r 6
a d 45
b z 9
b c 76
b a 89

这不是一个bug,它应该是这样工作的。仔细看,这里使用的是嵌套循环。

代码语言:javascript
复制
for(i in a)

这是一个外部循环,它将在2次迭代中遍历值ab

代码语言:javascript
复制
for(x in a[i])

这是内部循环,它将首先迭代for a,[$2]b,[$2]的值。

@val_num_asc将按照$3的值按升序对值进行数字排序。如果仔细查看打印的值,1,2,4,6,45 for $1=a将按值进行数字排序,9,76,89用于$1=b也是如此。

如果希望使用awk对输出进行排序,则使用建议的解决方法

代码语言:javascript
复制
awk '{a[$1 OFS $2]=$3} END {PROCINFO["sorted_in"]="@val_num_asc"; for(x in a) print x, a[x]}' c

a b 1
a t 2
a c 4
a r 6
b z 9
a d 45
b c 76
b a 89
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68054482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档