공통 열을 기준으로 두 파일을 병합합니다. 변형이 파일 2에 있는 경우 값을 유지하고 파일 2에 없는 변형에 대해 0을 추가합니다.

공통 열을 기준으로 두 파일을 병합합니다. 변형이 파일 2에 있는 경우 값을 유지하고 파일 2에 없는 변형에 대해 0을 추가합니다.

공통 데이터를 공유하는 두 개의 파일을 병합하고 싶습니다. File1에는 여러 개의 파일이 포함되어 있습니다2. 공유컬럼(3)을 기준으로 파일1을 기준으로 파일을 병합하고 싶은데, 파일2에 변수가 없으면 5번째 컬럼(AN1)에 0을 추가하고, 있으면 추가하고 싶습니다. AN1(연속 변수)의 원래 값.

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

CHR BP  SNP CM  base
10 99969507 rs35122894 0 0.23
10 99966455 rs17451447 0 1
10 99964768 rs72826281 0 0.43
10 9996313 rs111848993 0 0.01

파일 2

CHR BP  SNP CM  AN1
10 99969507 rs35122894 0 1.000000000000000
10 99966455 rs17451447 0 0.678999997353345
10 99964768 rs72826281 0 0.876534244415788
10 9996313 rs111848993 0 0.003456777789882

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

내가 원하는 출력은 다음과 같습니다. 파일 3

CHR BP  SNP CM  base AN1
10 99969507 rs35122894 0 0.23 1.000000000000000
10 99966455 rs17451447 0 1 0.678999997353345
10 99964768 rs72826281 0 0.43 0.876534244415788
10 9996313 rs111848993 0 0.01 0.003456777789882

나는 awk를 사용하여 이 작업을 수행하려고 합니다.

awk 'NR==FNR{ snp[$3]; next }
{ $6=($3 in snp)?(FNR==?"AN1[$5]):"0" }1' file2 file1 > file3
awk 'NR==FNR{a[$3]=$5;next} {print $1,$2,a[$3],$4,$5,$6}' File2 File1 > file3

답변1

$ awk 'NR==FNR{an1[$3]=$5; next} {print $0, an1[$3]}' file2 file1
CHR BP  SNP CM  base AN1
10 99969507 rs35122894 0 0.23 1.000000000000000
10 99966455 rs17451447 0 1 0.678999997353345
10 99964768 rs72826281 0 0.43 0.876534244415788
10 9996313 rs111848993 0 0.01 0.003456777789882

0질문 아래의 귀하의 의견에 따라 배열에 없을 때 SNP 값을 인쇄 하려면 다음을 수행하십시오.

awk 'NR==FNR{an1[$3]=$5; next} {print $0, ($3 in an1 ? an1[$3] : 0)}' file2 file1

관련 정보