使用awk在匹配的列值上连接2个文件

用户名

我知道也有类似的问题发布,但是我仍然无法使用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不在中valval[$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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用awk连接两个文件时,如何为不匹配的列打印一个值?

awk-根据匹配列合并2个.csv文件

使用Awk在两个文件中匹配五列

比较2个文件的awk,并从一列中减去值,如果两个文件中另一列的值均匹配

使用awk比较两个文件列的值

匹配两个文件的列元素并使用 AWK/PERL 将其替换为匹配的行

根据两个不同列中的匹配值连接两个以空格分隔的文件

使用awk提取2个文件之间的唯一值

使用awk保持文件1中的行与文件2中的值匹配

使用awk合并2个文件,同时保留所有列,并根据第1列中的匹配项添加额外的列

如果在同一个文件 perl/awk 中有匹配项,则连接列

Awk-匹配两个文件之间的值

使用awk命令基于第一匹配列合并两个文件

如何比较两个文件的两列并使用awk打印不匹配的模式

如何使用awk匹配基于不同列的两个文件?

Python Pandas 匹配来自 2 个文件的 2 列以填充文件中的值

连接2个发生多个匹配的表,并为多个值创建文本列

如何使用 awk/sed 命令连接两个文件中的列?

如何基于AWK中的一列连接两个文件(使用通配符)

如何在awk中使用键列连接两个文件

使用 AWK 匹配 2 个文件之间的多个字段并显示特定字段

在列值上匹配两个CSV文件的快速方法

比较两个文件,每个文件中的第三列都匹配,但是第二个fith列使用awk不匹配

匹配列标题并使用awk打印列的值

awk / sed /等在一个文件中连接列

如何使用AWK在产生的空字段上打印给定值的同时合并两个文件?

根据两个文件中第一列的匹配值将文件中的一列连接到另一个文件

当标题与多个文件匹配时,连接列值

awk-通过匹配列合并两个文件,并将第二个文件的列值附加到该行