2016-11-22 29 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