Unix文件匹配逻辑

Unix文件匹配逻辑

我有一个项目需求,需要从上到下读取 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 。

相关内容