我想将 的第二列添加file2
到file1
,其中包含未知数量的列,因此成为 的最后一列file1
。为此,我尝试file3
通过粘贴 afile1
并且仅粘贴第二列来创建一个组合file2
:
file1
:
col11 col12 col13 ... col1n
file2
:
col21 col22 col23 ... col2m
新的file1
或file3
:
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
file3
file1
将具有与和中最大的行数相同的行数file2
。不会丢弃任何数据,但如上所述,如果file2
长于file1
,则最后一行的第一/第二列中将包含 的数据file3
。file2
答案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