比较两个文件的第一列和第二列,如果匹配则打印第二个文件中的行

比较两个文件的第一列和第二列,如果匹配则打印第二个文件中的行

我浏览了以下问题的答案,但无法获得预期的输出,如下所示。

比较两个文件的第一列,如果第一列匹配,则打印第二个文件的整行

文件1

CLASS|124655
CLASS|124656
CLASS|124657
CLASS|124658

文件2

CLASS|124655|STEVE|SMITH||
CLASS|124656|ROGERS|KNIGHT||
CLASS|124657|MITCHELL|BRADFORD||
CLASS|124657||||1236536
CLASS|124658|NORMAN|JONES||
CLASS|124658||||1236539
CLASS|124665|JEFF|JONES||
CLASS|124665||||1236556

预期产出

CLASS|124655|STEVE|SMITH||
CLASS|124656|ROGERS|KNIGHT||
CLASS|124657|MITCHELL|BRADFORD||
CLASS|124657||||1236536
CLASS|124658|NORMAN|JONES||
CLASS|124658||||1236539

我尝试了 grep -f file1 file2 但它被内核杀死了,并且处理时间太长。文件1和文件2都有超过1m的记录。

答案1

一个awk解决方案是这样的:

$ awk -v FS="|" 'NR==FNR {get[$1"|"$2]++; next} get[$1"|"$2]' f1.txt f2.txt

不知道这是否适用于 100 万条记录。

相关内容