我有這樣一個文件:如何根據第一列和第二列計算總和?使用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
我有這樣一個文件:如何根據第一列和第二列計算總和?使用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
用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
謝謝,它的作品很棒! – user3103889
我修改了腳本,使它也計算了$ 4 – user3103889
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
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
請出示你試過的東西,這不是一個免費的編碼服務。 – Barmar
使用awk應該很簡單。檢查列1和列2是否與以前相同,並將4和5添加到累加器中。當1和2改變時,打印總數並重置它們。 – Barmar
如果值不同,您的示例不會顯示如何處理第3列。或者當第1列和第2列相同時它們總是一樣的? – tripleee