![对多个数组中的列号元素求和](https://linux22.com/image/8373/%E5%AF%B9%E5%A4%9A%E4%B8%AA%E6%95%B0%E7%BB%84%E4%B8%AD%E7%9A%84%E5%88%97%E5%8F%B7%E5%85%83%E7%B4%A0%E6%B1%82%E5%92%8C.png)
我需要对数组中同一列中的数字进行求和。
输入是:
1: 6.1703
44 3.5 0.3
46 7.3 2.3
2: 6.1932
44 5.29379 2.9
46 1.72261 7.2261
3: 6.5664
45 4.756 5.6
46 1.6 2.5
4: 8.0923
44 1.41 7.6
输出应该是:
1: 6.1703
10.8 2.6
2: 6.1932
7.01640 10.1261
3: 6.5664
6.356 8.1
4: 8.0923
1.41 7.6
答案1
使用稍微不同的方法awk -v RS="" -f script data
,其中脚本如下:
{
s1 = s2 = 0;
for (i=4; i < NF; i = i + 3) {
s1 += $i;
s2 += $(i+1);
}
print $1, $2 "\n " s1, s2 "\n";
}
这利用了“数组”由空行分隔的事实。
答案2
尝试
/:/ { if ( NR>1 ) printit() ; print ; two=0 ; three=0 ; next;}
NF > 2 { two+=$2 ; three+=$3 ; next }
{ print ; }
function printit() { printf " %s %s\n",two,three; }
END { printit() ;}
- 函数
printit
打印实际结果 - 总和在带有冒号 ( ) 的行上计算
:
。 END
子句用于最终打印。