如何使用 awk 将一个文件中的列添加到另一个文件的最后一列?

如何使用 awk 将一个文件中的列添加到另一个文件的最后一列?

我想将 的第二列添加file2file1,其中包含未知数量的列,因此成为 的最后一列file1。为此,我尝试file3通过粘贴 afile1并且仅粘贴第二列来创建一个组合file2

file1:

col11  col12  col13  ...  col1n

file2:

col21  col22  col23  ...  col2m

新的file1file3

col11 col12  ...  col1n  col22

我正在使用命令:

awk '{ print $0 > "file3"; getline<"file2"; print $2 > "file3" }' file1 &

但 col22 的参数将换行,而不是形成新文件的最后一列。

有人可以帮助我找到并纠正错误,或者找到更有效的解决方案?
我的操作系统是fedora12。

答案1

awk '{f1 = $0; getline<"file2"; print f1, $2}' < file1 > file3

输出文件将具有与 相同的行数file1,因此如果较短,则最后一行的最后一列将为空,如果较长,则file2最后一个值将被忽略。file2

或者,正如科斯塔斯建议的那样:

awk '{getline f1 <"file1" ; print f1,$2}' < file2 > file3

不过,到那时,file3行数将与 相同file2。这意味着如果file2长于,列的顺序将受到影响file1

和:

awk '{print $2}' < file2 | paste file1 - > file3

file3file1将具有与和中最大的行数相同的行数file2。不会丢弃任何数据,但如上所述,如果file2长于file1,则最后一行的第一/第二列中将包含 的数据file3file2

答案2

尝试

$ awk 'NR==FNR{a[NR]=$2;next}{print $0,a[FNR]}' file2 file1
col11 col12 col13 ... col1n col22

{a[NR]=$2;next}部分将仅针对列表中的第一个文件 ( file2) 执行,当awk处理第二个文件 ( file1) 时,我们打印整行并添加保存第二个字段值的file1表元素。a[FNR]file2

相关内容