比较两个文件并将匹配的行发送到新文件

比较两个文件并将匹配的行发送到新文件

我有两个文件

文件1.txt

a|1|cd
a|2|cd
a|4|cd

文件2.txt

a|0001|hj|df
a|0002|ed|nb
a|0003|vf|za
a|0004|er|ns
a|0005|oi|lk

我需要一个创建新文件,其中的行与文件的第二列匹配,我尝试下一个代码

awk -F"|" 'NR==FNR{a[$2]++;next} a[$2] ' file1.txt file2.txt

但没有找到记录,因为第二列中的 file1.txt 左侧不包含 0 我有指令

awk -F"|" 'NR==FNR{a[$(printf("%09d\n", $2))]++;next} a[$2]'

但不起作用。

结果必须是:

文件3.txt

a|0001|hj|df
a|0002|ed|nb
a|0004|er|ns

答案1

在字段中添加零会强制 awk 将其视为数字,而不是字符串:

$ awk -F"|" 'NR==FNR{a[$2+0]++;next} a[$2+0] ' file1.txt file2.txt
a|0001|hj|df
a|0002|ed|nb
a|0004|er|ns

因为字符串0001不同于1.通过向每个值添加零,我们将它们转换为数字,从而产生您想要的比较。

相关内容