我有这样一个文件:如何根据第一列和第二列计算总和?使用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