我有两个文件
文件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
.通过向每个值添加零,我们将它们转换为数字,从而产生您想要的比较。