나는 두 파일의 첫 번째 열이 동일할 때 awk를 사용하여 두 파일을 병합하려고 했습니다. 내 샘플 파일은 다음과 같습니다.
파일A.txt
A2M 1
A4GALT 11
AAAS 35
AAGAB 7
파일B.txt
A4GALT 2
AAAS 17
AAGAB 7
보시다시피 두 번째 파일이 누락되었습니다 A2M
. 항목이 누락된 경우 0
최종 출력에서 해당 항목을 읽어야 합니다. 그게 다야:
A2M 1 0
A4GALT 11 2
AAAS 35 17
AAGAB 7 7
내 연구실 동료가 나에게 제대로 작동하지 않기 awk
때문에 제안했습니다 . join
약간의 도움을 받아 다음 명령을 생각해냈습니다 awk
.
awk -F "\t" 'FNR==NR {h[$1] = $2;next} BEGIN{ OFS = "\t"} {print $0,$2?h[$1]:"0"}' FileB.txt FileA.txt
0
그러나 일치하는 항목이 없으면 내 출력은 아무것도 인쇄하지 않고 FileB.txt
대신 아무 것도 인쇄하지 않습니다. 무슨 문제가 있는지 아시나요?
답변1
파일 2개를 합치면 작업입니다join
:
join -1 1 -2 1 -a 1 -o 1.1 -o 1.2 -o 2.2 -e "0" FileA.txt FileB.txt
어디:
-1 1 -2 1
결합할 필드 정의(두 파일 모두에서 첫 번째)-a 1
페어링할 수 없는 라인 강제join
인쇄FileA.txt
-o 1.1 1.2 2.2
출력 형식입니다-e "0"
빈 필드에 저장할 값을 정의합니다 .
산출:
A2M 1 0
A4GALT 11 2
AAAS 35 17
AAGAB 7 7