일치하는 경우 다른 파일의 값으로 바꾸기

일치하는 경우 다른 파일의 값으로 바꾸기

변형 식별자 chr:pos가 있는 .bim 파일과 chr:pos 및 rs ID와 일치하는 SNP list.file이 있습니다.

파일1(.bim 파일):

1       1:10583         0       10583           G       A
1       1:10611         0       10611           G       C
... 
22      22:51242613     0       51242613        C       A
22      22:51243297     0       51243297        T       A

파일 2(SNP 목록):

rs99999 4:163870478
rs99998 4:117161848
...

file1의 컬럼2가 file2의 컬럼2(모두 chr:pos)와 일치할 때 file1의 컬럼2를 file2의 컬럼1로 바꾸고, 그렇지 않으면 file1의 컬럼2를 유지하려고 합니다.

성공하지 못하고 다음 스크립트를 시도했지만 교체가 발생하지 않습니다. 누구든지 도와줄 수 있나요?

awk -F"\t" -v OFS="\t" '{
    if (FNR==NR) {
        a[FNR]=$2;b[FNR]=$1}
    else {
        if (a[FNR] == $2) {
            $2=b[FNR]} else {$2=$2};
            print $0
        }
    }' file2 file1 > file1_update

답변1

BIM 파일과 일치하는 rsID 목록에 항목을 추가했습니다.

$ cat file2.list 
rs99999 4:163870478
rs99998 4:117161848
rs123456 22:51242613

그 다음에:

$ awk -F"\t" -v OFS="\t" '{ 
                            if(NR==FNR){
                                a[$2]=$1; next
                            }
                            if($2 in a){
                                $2=a[$2]
                            }
                         }1;' file2.list file1.bim 
1   1:10583 0   10583   G   A
1   1:10611 0   10611   G   C
... 
22  rs123456    0   51242613    C   A
22  22:51243297 0   51243297    T   A

관련 정보