根据公共列合并两个文件;如果变体存在于文件 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章