使用例如多个文件添加矩阵AWK

时间:2014-06-17 09:25:15

标签: matrix awk

我有一堆来自模拟输出的文件,所有文件都有相同数量的行和字段。 我需要做的是将它们组合起来,这样我只得到一个数字总和的文件,这基本上类似于添加几个矩阵。

示例:

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中的解决方案,尽管其他语言也是受欢迎的。

2 个答案:

答案 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