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
我想找到 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