일치하는 첫 번째 열과 행 병합

일치하는 첫 번째 열과 행 병합

나는 두 파일의 첫 번째 열이 동일할 때 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

관련 정보