我想找到file1中的字段1和2与file2中的字段2和3匹配的行,然后从file2打印所有字段。 file2中的行多于file1
File1中
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[$1];b[$2];next} FNR==1 || ($2 in a && $3 in b)' file1 file2 > test
但是语法错误
答案 0 :(得分:1)
考虑:
awk -F 'FNR==NR{a[$1];b[$2];next} FNR==1 || ($2 in a && $3 in b)' file1 file2
选项-F
需要一个参数,但没有故意提供参数。结果是awk
将整个代码解释为字段分隔符。这就是为什么代码没有按预期运行的原因。
从问题陈述中,我没有看到为什么FNR==1
应该在代码中。所以,我删除了它。一旦完成,不需要parens。如果是这种情况,则代码进一步简化为:
$ awk 'FNR==NR{a[$1];b[$2];next} $2 in a && $3 in b' file1 file2
--- rs116801199 720381 0.026 0.939 0.996 0 -1 -1 -1