2015-02-06 91 views
1

我想查找來自file1的字段1和2與來自file2的字段2和3相匹配的行,然後打印來自file2的所有字段。還有更多的行文件2比文件1awk匹配兩個文件中的兩個字段

文件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[$1];b[$2];next} FNR==1 || ($2 in a && $3 in b)' file1 file2 > test 

但有一個語法錯誤

回答

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