2013-12-15 60 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