如何在BASH中将两个表相乘

时间:2013-02-18 03:51:20

标签: linux bash shell awk

我有两个这样的数据文件:

文件1:

  a1    a2  a3  ... aN
  b1    b2  b3  ... bN
  .
  .
  .

文件1:

  A1    A2  A3  ... AN
  B1    B2  B3  ... BN
  .
  .
  .

我想将两个表相乘,即

  a1*A1 a2*A2   a3*A3   ... aN*AN
  b1*B1 b2*B2   b3*B3   ... bN*BN
  .
  .
  .

我可以用AWK或BASH中的其他东西吗?非常感谢!

1 个答案:

答案 0 :(得分:2)

这是使用GNU awk的一种方式,假设每个文件中的字段和行数相同。像:

一样运行
awk -f script.awk file1 file2

script.awk的内容:

FNR==NR {
    for (i=1;i<=NF;i++) {
        a[NR][i]=$i
    }
    next
}

{
    for (j=1;j<=NF;j++) {
        $j = $j * a[FNR][j]
    }
}1

或者,这是一个班轮:

awk 'FNR==NR { for(i=1;i<=NF;i++) a[NR][i]=$i; next } { for(j=1;j<=NF;j++) $j = $j * a[FNR][j] }1' file1 file2

测试:

file1的内容:

1 2 3   
2 4 6

file2的内容:

3 4 5
6 7 8

结果:

3 8 15
12 28 48

<强> 编辑:

如果,我的意思是,如果一个文件可能有额外的字段而另一个没有,则更改:

$j = $j * a[FNR][j]

为:

$j = (a[FNR][j] ? $j * a[FNR][j] : $j)

这将打印现有值而不是零。 HTH。