我有一个项目需求,需要从上到下读取 file1 并将其第 2 列与 file2 的第 3 列进行匹配。两个文件均以制表符分隔。
如果记录匹配,我必须将文件 1 中的完整记录写入新文件 3,如果不匹配,我必须将相同的记录写入错误文件(文件 4)。文件 1 和文件 2 包含 500-510 条记录。需要从头开始读取file1,并在file2的第3列中找到第2列的值(如果需要,从上到下全扫描)。
文件1
ZZA 01 LIST18
ZZY 02 LIST38
UTW 80 LIST100
OOP 11 LIST56
文件2
A1 21138 99999 LIST18
W1 20223 99999 LIST44
Z9 20355 99999 LIST56
O9 21002 21154 LIST11
文件3
ZZA 01 LIST18
OOP 11 LIST56
文件4
ZZY 02 LIST38
UTW 80 LIST100
答案1
如果您打算将 file1 的第 3 列与 file2 的第 4 列匹配,您可以使用awk
:
awk -F'\t' '
NR==FNR{ arr[$4]; next }
{ print > (($3 in arr) ? "file3" : "file4") }
' file2 file1
首先读取 file2 并将数组中的第四个字段保存arr
为索引。
然后读取file1和print
每条记录。如果数组中存在第三个字段,则将输出重定向到 file3 ,否则重定向到 file4 。