공통 열을 기반으로 두 파일을 병합하고 파일 2에 존재하지 않는 파일에 0을 추가합니다.

공통 열을 기반으로 두 파일을 병합하고 파일 2에 존재하지 않는 파일에 0을 추가합니다.

공통 데이터를 공유하는 두 개의 파일을 병합하고 싶습니다. 파일 1에는 파일 2보다 더 많은 콘텐츠가 포함되어 있습니다. 공유 컬럼을 기준으로 파일 1의 순서대로 파일을 병합하고 싶은데, 파일 2에 변수가 없으면 컬럼 5(AN1)에 0을 추가하고 싶습니다.

내 파일은 다음과 같습니다: 파일 1

CHR BP  SNP CM  base
20  61098   rs6078030   -0.00024510777  1
20  61795   rs4814683   0   1
20  63231   rs6076506   0.0005026053    1
20  63244   rs6139074   0.00050714752   1

파일 2

CHR BP  SNP CM  AN1
20 9836704 rs221007 0 1
20 9817032 rs221011 0 1
20 9764069 rs2206484 0 1
20 9639395 rs4816159 0 1

열 3(SNP)을 기준으로 일치시키고 싶습니다. 지금은 다른 모든 열을 유지하고 싶습니다.

내가 원하는 출력은 다음과 같습니다(rsX가 없으면 0).

파일 3

CHR BP  SNP CM  base AN1
20  61098   rs6078030   -0.00024510777  1   1
20  61795   rs4814683   0   1   1
20  63231   rs6076506   0.0005026053    1   1
20  63244   rs6139074   0.00050714752   1   1

이 작업을 수행하려면 한 단계 이상이 필요하다고 생각합니다. 첫 번째 단계를 수행하기 위해 awk를 사용해 보았지만 빈 파일만 생성되었습니다.

awk -F' ' 'NR==FNR{e[$1$2]=1;next};e[$1$2]' file1 file 2 > file 3
awk -F' ' 'NR==FNR{e[$1$2]=1;next};e[1$2]' file2 file 1 > file 3

마지막 단계가 될 것 같아요 join file1 file 2 > file 3.

답변1

awk 'NR==FNR{ snp[$3]; next }
{ $6=($3 in snp)?(FNR==1?"AN1":"1"):"0" }1' file2 file1

관련 정보