如何将一个文件的列乘以另一个文件同一行中的数字?

如何将一个文件的列乘以另一个文件同一行中的数字?

我有两个文件,它们的行数都相同。文件 1 有 16 列,文件 2 有 2 列

文件1

1 2 3 4...
2 3 4 5...
3 4 5 6...

文件2

text 10
text 11
text 12

现在我想要另一个具有以下输出的文件

10 20 30 40...
22 33 44 55...
36 48 60 72...

我尝试使用 awk 但没有成功

答案1

$ awk '{ getline line <"file2"; split(line,a); for (i=1; i<=NF; ++i) $i *= a[2] };1' file1
10 20 30 40
22 33 44 55
36 48 60 72

file1对于命令行上给出的 中的每一行,该awk程序从 中读取一行file2并将其按空格分割到数组 中a。的第二个元素a用于乘以当前记录中的每个字段(来自file1)。在循环结束时,尾随1导致修改的记录被输出。

如果 中的文本file2包含空格,并且总是最后该文件中应该使用的字段,然后跟踪该line字符串被分割成多少个字段:

$ awk '{ getline line <"file2"; nf=split(line,a); for (i=1; i<=NF; ++i) $i *= a[nf] };1' file1
10 20 30 40
22 33 44 55
36 48 60 72

为了另外避免对第二个文件的名称进行硬编码,请将其名称传递到awk命令行上的变量中:

$ awk -v other=file2 '{ getline line <other; nf=split(line,a); for (i=1; i<=NF; ++i) $i *= a[nf] };1' file1
10 20 30 40
22 33 44 55
36 48 60 72

...或将其名称传递到环境变量中:

$ other=file2 awk '{ getline line <ENVIRON["other"]; nf=split(line,a); for (i=1; i<=NF; ++i) $i *= a[nf] };1' file1
10 20 30 40
22 33 44 55
36 48 60 72

相关内容