2013-02-18 64 views
0

我有兩個數據文件是這樣的:如何乘兩個表中BASH

文件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中處理其他問題?非常感謝!

+0

我在R中試過。是的,它在R中很容易,但我希望在BASH中這樣做,以便這一步可以集成到我的數據分析管道中。 – Runner 2013-02-18 04:05:00

回答

2

下面是使用GNU awk的一種方法,假設每個文件中的字段和行數都相同。運行,如:中script.awk

awk -f script.awk file1 file2 

內容:

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。

+0

非常感謝你! AWK太棒了! – Runner 2013-02-18 04:07:00

+0

@Runner:沒問題。乾杯。 – Steve 2013-02-18 04:14:09