我有一堆来自模拟输出的文件,所有文件都有相同数量的行和字段。 我需要做的是将它们组合起来,这样我只得到一个数字总和的文件,这基本上类似于添加几个矩阵。
示例:
FILE1.TXT
1 1 1
1 1 1
1 1 1
FILE2.TXT
2 2 2
2 2 2
2 2 2
File3.txt
3 3 3
3 3 3
3 3 3
必需的输出
6 6 6
6 6 6
6 6 6
我要将它集成到一些更大的Shell脚本中,因此我更喜欢awk中的解决方案,尽管其他语言也是受欢迎的。
答案 0 :(得分:1)
awk '{for(i=1;i<=NF;i++)a[FNR,i]=$i+a[FNR,i]}
END{for(i=1;i<=FNR;i++)
for(j=1;j<=NF;j++)printf "%s%s", a[i,j],(j==NF?"\n":FS)}' f1 f2 f3
输入文件可能超过3个
使用您的数据进行测试:
kent$ head f[1-3]
==> f1 <==
1 1 1
1 1 1
1 1 1
==> f2 <==
2 2 2
2 2 2
2 2 2
==> f3 <==
3 3 3
3 3 3
3 3 3
kent$ awk '{for(i=1;i<=NF;i++)a[FNR,i]=$i+a[FNR,i]}END{for(i=1;i<=FNR;i++)for(j=1;j<=NF;j++)printf "%s%s", a[i,j],(j==NF?"\n":FS)}' f1 f2 f3
6 6 6
6 6 6
6 6 6
答案 1 :(得分:1)
快速入侵:
paste f1 f2 f3 | awk '{for(i=1;i<=m;i++)printf "%d%s",$i+$(i+m)+$(i+2*m),i==m?ORS:OFS}' m=3