我知道也有类似的问题发布,但是我仍然无法使用awk FNR == NR来获得输出...我有2个文件
File 1:
123|this|is|good
456|this|is|better
...
File 2:
aaa|123
bbb|456
...
所以我想将文件2 / column2的值连接到文件1 / column1,并输出文件1(col 2,3,4)和文件2(col 1)。
提前致谢。
使用awk,您可以执行类似的操作
awk -F \| 'BEGIN { OFS = FS } NR == FNR { val[$2] = $1; next } $1 in val { $(NF + 1) = val[$1]; print }' file2 file1
NF
是记录中的字段数(默认情况下为行),$NF
最后一个字段$(NF + 1)
也是如此,其后是该字段。通过将传递的值分配给保存的值,file2
可以在打印之前在记录上附加一个新字段。
需要注意的一件事:这就像一个内部联接,即只打印其键出现在两个文件中的记录。要使其成为正确的联接,您可以使用
awk -F \| 'BEGIN { OFS = FS } NR == FNR { val[$2] = $1; next } { $(NF + 1) = val[$1]; print }' file2 file1
也就是说,您可以将$1 in val
条件放在“添加并打印”操作上。如果$1
不在中val
,val[$1]
则为空,并且在打印之前会将空白字段附加到记录中。
但是使用它可能更好join
:
join -1 1 -2 2 -t \| file1 file2
如果您不希望将键字段作为输出的一部分,则通过管道将这两个命令中的任何一个的输出通过管道cut -d \| -f 2-
除去,即
join -1 1 -2 2 -t \| file1 file2 | cut -d \| -f 2-
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句