공통 데이터를 공유하는 두 개의 파일을 병합하고 싶습니다. 파일 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