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