接收文件
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
答案 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