awk 字符串匹配 2 列

awk 字符串匹配 2 列

我有一个文件(文件 1),内容如下:

2  test1
3  test2 
2  test3 
1  test1 
4  test2

还有一个主文件(file2):

2    test1
3  test1
4         test1
2  test2
3 test2
4   test2
5 test2 
...

当文件 1 的第 1 列和第 2 列匹配时,我想打印文件 2 中的所有行。我想保留文件 2 的随机格式。最好的方法是什么?

答案1

尝试

awk 'NR==FNR { a[$1 $2]=1 ; } NR>FNR { if ( $1 $2 in a ) print ;}'

在哪里

  • NR==FNR记录数==文件记录数(我们在第一个文件中)
  • { a[$1 $2]=1 ; }存储密钥(无空格连接)
  • NR>FNR(我们在第二个文件中)
  • if ( $1 $2 in a )如果索引存在...
  • print打印该行。

哪个给你样品

2    test1
3 test2
4   test2

答案2

awk 'n[$1][$2]++'   file1 file2

假设两个文件中都没有重复项。

答案3

perl -lane '@ARGV and $h{"@F"}++,next; print if $h{"@F"}' file1 file2

输出

2    test1
3 test2
4   test2

相关内容