按第3列和第1列进行Bash排序

时间:2016-11-22 19:13:28

标签: bash sorting awk

接收文件

website1 ip 20
website1 ip 30
website1 ip 10
website2 ip 200
website2 ip 10 
website3 ip 150

我需要对它进行排序,以便第3个与相关网站的总和首先显示在网站上的总数最高

website2有210个网站3有150个网站1有60个

website2 ip 200
website2 ip 10
website3 ip 150
website1 ip 30
website1 ip 20
website1 ip 10

我试过排序-k3n -k1n,但这不是我要找的结果230 website2 ip 200

1 个答案:

答案 0 :(得分:3)

您可以使用awk进行2次传递并对每个网站的第3列求和(第1列)并在输出中追加新列。然后使用输出中的新列进行排序,最后使用cut从输出中删除第一列:

awk 'FNR==NR{sum[$1]+=$3; next} {print sum[$1] "\t" $0}' file file |
sort -k1nr -k4nr |  cut -f2-

website2 ip 200
website2 ip 10
website3 ip 150
website1 ip 30
website1 ip 20
website1 ip 10
awk命令的

输出

awk 'FNR==NR{sum[$1]+=$3; next} {print sum[$1] "\t" $0}' file file

60  website1 ip 20
60  website1 ip 30
60  website1 ip 10
210 website2 ip 200
210 website2 ip 10
150 website3 ip 150