2016-11-22 27 views
1

进文件猛砸排序由第3列第一列

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

我需要它来进行排序,以便与相关网站第三的总和将首先显示与该网站

最高的总WEBSITE2有210网站3具有150 WEBSITE1有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

你可能找不到一个“纯”'sort'解。 'sort'逐行进行比较,但是您的排序标准取决于按组排序,然后依次排序。 –

回答

3

您可以使用awk对每个网站(第1列)进行2遍和求和,并在输出中追加一个新列。然后,在输出排序使用新列,最后用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 
+0

嗨@anubhava感谢您的帮助! ,它按照第一列的总和进行排序,但它并没有按顺序排列第四列 – brianpb245

+0

您也可以尝试这个命令:'awk'FNR == NR {sum [$ 1] + = $ 3;下一个} {打印总和[$ 1]“\ t”$ 0}'文件文件| sort -k1nr -k4nr | cut -f2-' – anubhava

+0

ahhhh我知道问题是什么。我的原始文本文件并不像我的例子那么完美。 IP和计数之间有2个空格,所以它不起作用。我只需要清理它,它的工作原理! – brianpb245