2015-02-06 2 views
1

file1의 필드 1과 2가 file2의 필드 2와 3과 일치하는 행을 찾고 파일 2의 모든 필드를 인쇄하려고합니다. 에서 파일 1awk가 두 파일의 두 필드와 일치합니다.

이상의 파일 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 

을 File1

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

있는 File2 있습니다

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이 코드에 있어야하는 이유를 알지 못했습니다. 그래서 나는 그것을 제거했다. 일단 그것이 끝나면, 괄호는 불필요합니다. 이 경우 코드가 다음과 같이 더욱 단순화됩니다.

$ 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 
관련 문제