Text-Processing
根據公共列合併兩個文件;如果變體存在於文件 2 中,則保留該值,並將 0 添加到文件 2 中不存在的變體
我想合併兩個共享一些通用數據的文件。文件 1 包含的內容多於文件 2。我想按照文件 1 的順序根據它們的共享列 (3) 合併文件,並且當文件 2 中不存在變數時,我想將 0 添加到列 5 (AN1),如果存在,則添加 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
$ 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