0

私はこのような2つのデータファイルを持っています:

file1:

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

file1:

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

2つのテーブルを掛けたい、つまり

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

AWKまたはBASHの他の何かでそれを行うことはできますか?どうもありがとう!

4

1 に答える 1

2

GNU awk各ファイルに同じ数のフィールドと行があると仮定して、を使用する1つの方法を次に示します。次のように実行します:

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

または、これが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。

于 2013-02-18T03:59:44.727 に答える