【发布时间】:2021-09-04 07:57:46
【问题描述】:
[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
[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
[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"对多维数组排序有问题,没有真正的排序。一维数组没有问题。问题是什么?是不是因为不支持多维数组?
【问题讨论】:
-
不清楚您想通过 4 个 awk 脚本和问题中的相关输出告诉我们什么。请edit你的问题显示一个minimal reproducible example,只有1个输入和实际输出示例,添加你期望的输出而不是你得到的输出,并告诉我们问题出在哪里,而不是仅仅说
There is a problem但不告诉我们是什么。 -
一旦您告诉我们您期望什么输出(以及为什么),我们可以帮助您编写代码来产生该输出。同时,您可能对how-do-you-copy-a-multi-dimensional-array-i-e-an-array-of-arrays-in-awk 感兴趣,因为它展示了如何使用
isarray(),这可能与您正在尝试做的事情有关。
标签: arrays multidimensional-array awk