当匹配时替换为另一个文件中的值

当匹配时替换为另一个文件中的值

我有一个 .bim 文件,其变体标识符为 chr:pos 和一个与 chr:pos 和 rs ID 匹配的 SNP list.file。

file1(.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中的column2与file2中的column2匹配时(均为chr:pos),我想用file2中的column1替换file1中的column2,否则,保留file1中的column2。

我尝试了以下脚本,但没有成功,没有发生替换。任何人都可以帮忙吗?

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

我在 rsID 列表中添加了一个与您的 bim 文件匹配的条目:

$ 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

相关内容