我有两个这样的数据文件:
文件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 中的其他东西来做吗?非常感谢!
最佳答案
这是使用 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.
关于linux - 如何在 BASH 中将两个表相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14929198/