2013-12-15 89 views
0

我有這樣一個文件:如何根據第一列和第二列計算總和?使用shell腳本

ast 6 + 0 2 
ast 6 + 1 20 
ast 7 - 0 0 
ast 7 - 1 24 
ria 366914 + 0 0 
ria 366914 + 0 2 

它是根據第一和第二列進行排序。這意味着第1欄和第2欄的所有相同值在 之間彼此關閉。 當第一列和第二列的值相同時,我想對列4和列5進行求和。

ast 6 + 1 22  
ast 7 - 1 24  
ria 366914 + 0 2 
+4

請出示你試過的東西,這不是一個免費的編碼服務。 – Barmar

+0

使用awk應該很簡單。檢查列1和列2是否與以前相同,並將4和5添加到累加器中。當1和2改變時,打印總數並重置它們。 – Barmar

+0

如果值不同,您的示例不會顯示如何處理第3列。或者當第1列和第2列相同時它們總是一樣的? – tripleee

回答

1

用awk:

awk 'p != $1 OFS $2{if (NR>1) print p, q, s; p=$1 OFS $2; q=$3 OFS $4; s=$5; next} {s+=$5} END{print p, q, s}' file 
ast 6 + 0 22 
ast 7 - 0 24 
ria 366914 + 0 2 
+0

謝謝,它的作品很棒! – user3103889

+0

我修改了腳本,使它也計算了$ 4 – user3103889

+0

awk'p!= $ 1 OFS $ 2 {if(NR> 1)print p,q,r,s; p = $ 1 OFS $ 2; Q = $ 3; R = $ 4; S = 5 $;下一個} {s + = $ 5; r + = $ 4} END {print p,q,r,s}' – user3103889

0
awk '{str=$1 FS $2;a[str]+=$4;b[str]+=$5;c[str]=$3}END{for (i in a) print i,c[i],a[i],b[i]}' infile |sort -k1,1 -k2,2n 

ast 6 + 1 22 
ast 7 - 1 24 
ria 366914 + 0 2