Awk 通过两列匹配比较两个文件

Awk 通过两列匹配比较两个文件,awk,Awk,我有两个带列的文件。如果两个文件的第一列和第二列相等,我需要打印第二个文件的内容。例: file1 Name1 123 blabla Name1 456 bla Name3 777 s file2 Name1 123 something more Name2 456 some words Name4 111 no Desired output: Name1 123 something more 我已经编写了这段代码,但它只适用于一列,在本例中为第二列: awk 'BEGIN{FS=O

我有两个带列的文件。如果两个文件的第一列和第二列相等,我需要打印第二个文件的内容。例:

file1

Name1 123 blabla
Name1 456 bla
Name3 777 s

file2

Name1 123 something more
Name2 456 some words
Name4 111 no

Desired output:

Name1 123 something more
我已经编写了这段代码,但它只适用于一列,在本例中为第二列:

awk 'BEGIN{FS=OFS="\t"} NR == FNR {f[$2]; next;} $2 in f{print $0;}' file1 file2
我在这里找到了一些相关的东西:,但我找不到正确的方法。我尝试过这个,但不起作用..:

awk 'BEGIN{FS=OFS="\t"} NR == FNR {f[$1 FS $2]; next;} if($1 in f && $2 in f){print $0;}'
提前感谢,

您可以

awk 'NR == FNR { a[$1, $2]++; next } a[$1, $2]' file1 file2
输出:

Name1 123 something more
[$1,$2]与[$1,$2]不同。不知何故,Awk的实现确保$1、$2与文本字符串不匹配。
很好用。谢谢一个小问题,只是好奇,你知道为什么我的代码不起作用吗?第二次尝试时,你没有给f[$1 FS$2]赋值。你分别用这两个值做ins:$1在f和$2在f。当然,从来没有过f[$1]和f[$2]。在您的版本中,它可能是f[$1fs$2]+。。。如果$1 FS$2在f中`