【发布时间】:2015-07-02 00:15:58
【问题描述】:
我需要按降序对该文件进行排序,以避免重复
Bob 5 404
Mike 3 404
Bob 19 404
Bob 78 404
Mike 93 404
Joe 7 404
所以我的结果应该是
Bob 102
Mike 96
Joe 7
我现在拥有的是这个
awk '{if($3 == 404) arr[$1]+=$2}END{for(i in arr)print i, arr[i]}' file
我知道有sort -d,但是我需要如何在awk中使用它?
更新
awk 'BEGIN{FS=" "}{if($9 == 404) arr[$1]+=1}END{for(i in arr) print arr[i] | sort -k2nr }' input > output
我得到了这个结果
sh: 0: not found
我的输出文件现在是空的。
【问题讨论】:
-
唯一键相对“有限”吗?
-
如果您使用
gawk,您可以访问asort()函数。 -
这不仅仅是排序。您正在聚合具有重复键的记录,而不是避免它们。
-
BEGIN{FS=" "}不是必需的。您需要将+=1替换为+=$2。将输出通过管道传送到sort -k2nr以按相反的数字顺序排序。 -
@JonathanLeffler:好建议,但要确保仅按第二列进行排序(尽管在 this 中没有区别例),应该是
-k2,2nr。
标签: arrays shell sorting unix awk