나는 두 개의 주요 열(염색체와 위치)을 기반으로 두 개의 큰 파일을 병합하려고 시도했는데 내가 찾은 가장 효율적인 방법은 awk
.
내 파일의 예는 다음과 같습니다.
file1.txt
Gene_ID Chromosome Position Fst
ENSG00000141424 18 33688658 0
ENSG00000141424 18 33688669 0
ENSG00000141424 18 33688681 0
ENSG00000141424 18 33688683 0.0111734
ENSG00000141424 18 33688720 0
ENSG00000141424 18 33688726 0
ENSG00000141424 18 33688743 0
ENSG00000141424 18 33688745 0
ENSG00000141424 18 33688763 0
다른 파일:
file2.txt
Chromosome Start End Ref Alt RS_ID
1 10019 10020 TA T rs775809821
1 10020 10020 A - rs775809821
1 10055 10055 - A rs768019142
1 10055 10055 T TA rs768019142
1 10108 10108 C T rs62651026
1 10109 10109 A T rs376007522
1 10128 10128 A AC rs796688738
1 10128 10128 - C rs796688738
1 10139 10139 A T rs368469931
1 10144 10145 TA T rs144773400
나는 다음과 같은 세 번째 파일을 원합니다.
Gene_ID Chromosome Position RS_ID Fst
ENSG00000141424 18 33688658 rs1504554... 0
을 사용해 보았는데 구문은 괜찮다고 생각하지만 내가 얻는 것은 포함 되고 연결된 awk
파일뿐입니다 .file1.txt
file2.txt
awk 'FS=" "; OFS=" ";NR=FNR{A[$1,$2]=$6;next}{$5=A[$2,$3];print}' file1.txt file2.txt > file3.txt
내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?
답변1
코드를 몇 가지 수정하면 문제가 해결됩니다.
awk 'NR==FNR{A[$1,$2]=$6;next}{$5=A[$2,$3];if($5!="")print}' file2.txt file1.txt
NR==FNR
그리고 of는NR=FNR
awk가 첫 번째 파일을 실행할 때의 조건입니다.file2.txt
- 두 번째 실행에서
NR!=FNR
조인 키가 있으면 다음 줄을 인쇄합니다.A
- awk의 기본 필드 구분 기호는 이미 공백이므로 여기서 지정할 필요가 없습니다.