如何将1000 Genomes的22条染色体VCF文件合并为单个文件?
合并1000 Genomes VCF文件的实用方案
老哥,关于合并1000 Genomes的VCF文件,你提到的先转Plink二进制再合并的路子完全可行,但其实还有更直接的方法,我给你拆解几种方案,你根据后续分析需求选就行:
方案一:先转Plink二进制再合并(你提到的思路)
这个方法适合后续主要用Plink做群体遗传学分析的场景,步骤很清晰:
- 先逐个把染色体VCF转成Plink二进制格式:
(加plink --vcf chr1.vcf --make-bed --out chr1 --allow-extra-chr--allow-extra-chr是因为1000G的染色体命名带chr前缀,Plink默认只识别纯数字染色体,避免报错;如果是压缩的VCF,用--vcf chr1.vcf.gz即可) - 新建一个合并列表文件
merge_list.txt,每行写对应染色体的Plink文件前缀:chr1 chr2 ... chr22 - 最后用Plink的
--bmerge批量合并:plink --bmerge merge-list merge_list.txt --make-bed --out all_chrs --allow-extra-chr - 注意:如果遇到样本ID冲突或者性别字段缺失的问题,可以加
--allow-no-sex参数跳过检查,1000G的官方数据样本ID是统一的,一般不会有问题。
方案二:直接合并VCF文件(无需转格式)
如果后续还需要用VCF格式做分析(比如用GATK、bcftools做变异注释、筛选),直接合并VCF是最省事儿的,推荐用bcftools(效率高、稳定性好):
- 批量合并压缩的VCF文件(1000G官方数据一般是
.vcf.gz格式):
(bcftools concat chr{1..22}.vcf.gz -o all_chrs.vcf.gz -O z{1..22}是shell批量匹配语法,不用手动敲22个文件名;-O z表示输出压缩的VCF,节省空间) - 如果是未压缩的VCF,直接把后缀改成
.vcf就行:bcftools concat chr{1..22}.vcf -o all_chrs.vcf.gz -O z - 替代工具:也可以用
vcf-concat(vcftools套件里的工具),但效率不如bcftools,命令是:vcf-concat chr{1..22}.vcf.gz | bgzip -c > all_chrs.vcf.gz
方案三:Plink2一步到位合并VCF转二进制
如果你还是想得到Plink二进制文件,但不想分步转,Plink2支持直接批量读取VCF并合并输出:
plink2 --vcf chr{1..22}.vcf.gz --make-bed --out all_chrs --allow-extra-chr
这个命令会直接把22条染色体的VCF合并成一个Plink二进制文件,比方案一少一步,更省心。
选择建议
- 要是后续主要用Plink做分析:优先选方案三,一步搞定;或者方案一,适合需要单独处理每个染色体的场景
- 要是后续还要用VCF格式:直接选方案二,避免格式转换的额外操作,还能保留完整的变异信息
- 不管用哪种方法,建议先拿1-2条染色体做测试,确认合并后的文件样本数、位点数正常,再批量处理,避免白忙活
内容的提问来源于stack exchange,提问作者bha




