awk 匹配两个文件中的两个字段

awk to match two fields in two files

我想找到 file1 中的字段 1 和 2 与 file2 中的字段 2 和 3 匹配的行,然后打印 file2 中的所有字段。 file2 中的行数多于 file1

文件 1

rs116801199 720381 
rs138295790 16057310
rs131531 16870251
rs131546 16872281
rs140375 16873251
rs131552 16873461

文件 2

--- rs116801199 720381 0.026 0.939 0.996 0 -1 -1 -1                                                                            
1 rs12565286 721290 0.028 1.000 1.000 2 0.370 0.934 0.000                                                                      
1 rs3094315 752566 0.432 1.000 1.000 2 0.678 0.671 0.435                                                                       
--- rs3131972 752721 0.353 0.906 0.938 0 -1 -1 -1                                                                              
--- rs61770173 753405 0.481 0.921 0.950 0 -1 -1 -1   

我试过类似的东西:

awk -F 'FNR==NR{a[];b[];next} FNR==1 || ( in a &&  in b)' file1 file2 > test

但是遇到语法错误

考虑:

awk -F 'FNR==NR{a[];b[];next} FNR==1 || ( in a &&  in b)' file1 file2

选项 -F 需要一个参数,但没有有意提供任何参数。结果是 awk 将整个代码解释为字段分隔符。这就是为什么该代码没有按预期 运行。

从问题陈述中,我没有看出为什么 FNR==1 应该出现在代码中。所以,我删除了它。一旦完成, parens 就没有必要了。如果是这样,那么,代码进一步简化为:

$ awk 'FNR==NR{a[];b[];next}  in a &&  in b' file1 file2 
--- rs116801199 720381 0.026 0.939 0.996 0 -1 -1 -1