2025.06.17【BUG】|多样品VCF文件合并技巧及注意事项(以bcftools为例)

### 文章目录

  • [@[toc]](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [一、合并VCF的常用命令](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [1.1 合并多个bgzip压缩的VCF文件](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [1.2 使用文件列表合并](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [二、合并前的准备与注意事项](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [2.1 文件格式要求](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [2.2 样本名唯一性](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [2.3 检查文件模式匹配](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [三、常见报错与解决方法](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [3.1 报错:`Error: Duplicate sample names (sample1), use --force-samples to proceed anyway.`](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [3.2 报错:`Could not retrieve index file for ...`](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [四、自动化脚本推荐](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [4.1 检查并转换VCF为bgzip格式](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [4.2 检查重复样本并生成唯一文件列表](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [4.3 合并并生成统计](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [五、合并后格式转换与统计](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [5.1 转换为TXT表格](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [5.2 统计每个样品的SNP数](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)
  • [六、总结](#文章目录 @[toc] 一、合并VCF的常用命令 1.1 合并多个bgzip压缩的VCF文件 1.2 使用文件列表合并 二、合并前的准备与注意事项 2.1 文件格式要求 2.2 样本名唯一性 2.3 检查文件模式匹配 三、常见报错与解决方法 3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway. 3.2 报错:Could not retrieve index file for ... 四、自动化脚本推荐 4.1 检查并转换VCF为bgzip格式 4.2 检查重复样本并生成唯一文件列表 4.3 合并并生成统计 五、合并后格式转换与统计 5.1 转换为TXT表格 5.2 统计每个样品的SNP数 六、总结)

在群体遗传学、RAD-seq等高通量测序分析中,常常需要将多个样品的VCF文件合并为一个群体VCF文件,便于后续的群体变异分析、PCA、GWAS等。本文以bcftools为例,详细介绍多样品VCF合并的标准流程、常见报错及解决方法,并附带自动化脚本工具。


一、合并VCF的常用命令

1.1 合并多个bgzip压缩的VCF文件

其实一般常见做法是使用gatk CombineGVCFs命令将g.vcf.gz格式的各个样品进行合并后再进行质控,过滤。但是实际情况是没有过滤的snp文件较大,再加上如果做群体遗传分析,样品较多,合并环节就相当耗费时间。因此,这里选择将过滤后的vcf.gz文件使用bcftools进行合并,可以大大缩短合并时间,提升分析效率。

bash 复制代码
bcftools merge -Oz -o merged_filtered_snps.vcf.gz sample1.vcf.gz sample2.vcf.gz sample3.vcf.gz
tabix -p vcf merged_filtered_snps.vcf.gz

1.2 使用文件列表合并

当样品较多时,推荐先生成一个文件列表:

bash 复制代码
ls aa*/aa*_filtered.vcf.gz > vcf_list.txt
bcftools merge -Oz -o merged_filtered_snps.vcf.gz -l vcf_list.txt
tabix -p vcf merged_filtered_snps.vcf.gz

二、合并前的准备与注意事项

2.1 文件格式要求

  • 必须为bgzip压缩格式.vcf.gz),且有.tbi索引文件。

  • 可用如下命令检查和转换:

    bash 复制代码
    bgzip sample.vcf
    tabix -p vcf sample.vcf.gz

2.2 样本名唯一性

  • 每个VCF文件的样本名必须唯一,不能有重复。

  • 可用如下命令检查样本名:

    bash 复制代码
    bcftools query -l sample1.vcf.gz

2.3 检查文件模式匹配

  • 避免通配符匹配到同一样本的多个文件(如sample1_filtered.vcf.gzsample1_tmp_filtered.vcf.gz)。
  • 推荐只保留每个样本的最终过滤文件。

三、常见报错与解决方法

3.1 报错:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway.

原因:合并的VCF文件中有重复的样本名。

解决方法

  • 检查文件列表,确保每个样本只出现一次。
  • 可用如下脚本自动检查并生成唯一文件列表:
python 复制代码
# scripts/check_duplicate_samples.py
# 用法:python scripts/check_duplicate_samples.py 'aa*/aa*_filtered.vcf.gz' unique_vcf_list.txt
  • 合并时用唯一文件列表:

    bash 复制代码
    bcftools merge -Oz -o merged_filtered_snps.vcf.gz -l unique_vcf_list.txt

3.2 报错:Could not retrieve index file for ...

原因 :缺少.tbi索引文件。

解决方法

bash 复制代码
tabix -p vcf sample.vcf.gz

四、自动化脚本推荐

4.1 检查并转换VCF为bgzip格式

python 复制代码
# scripts/check_and_convert_vcf.py
# 用法:python scripts/check_and_convert_vcf.py 'aa*/aa*_filtered.vcf*'

4.2 检查重复样本并生成唯一文件列表

python 复制代码
# scripts/check_duplicate_samples.py
# 用法:python scripts/check_duplicate_samples.py 'aa*/aa*_filtered.vcf.gz' unique_vcf_list.txt

4.3 合并并生成统计

bash 复制代码
bcftools merge -Oz -o merged_filtered_snps.vcf.gz -l unique_vcf_list.txt
tabix -p vcf merged_filtered_snps.vcf.gz
bcftools stats merged_filtered_snps.vcf.gz > merged_stats.txt

五、合并后格式转换与统计

5.1 转换为TXT表格

python 复制代码
# scripts/vcf_to_txt.py
# 用法:python scripts/vcf_to_txt.py merged_filtered_snps.vcf.gz

5.2 统计每个样品的SNP数

python 复制代码
# scripts/count_snp_per_sample.py
# 用法:python scripts/count_snp_per_sample.py merged_filtered_snps.vcf.gz

六、总结

  • 合并VCF前请确保每个样品只保留一个最终VCF文件,且为bgzip格式并有索引。
  • 合并时推荐用文件列表,避免通配符误操作。
  • 遇到重复样本名、缺少索引等报错时,优先检查文件列表和文件格式。
  • 可用Python脚本自动化检查、转换和统计,提升效率。

如需脚本源码或Snakemake自动化流程,可私信或评论获取!


🌟 非常感谢您抽出宝贵的时间阅读我的文章。如果您觉得这篇文章对您有所帮助,或者激发了您对生物信息学的兴趣,我诚挚地邀请您:

👍 点赞这篇文章,让更多人看到我们共同的热爱和追求。

🔔 关注我的账号,不错过每一次知识的分享和探索的旅程。

📢 您的每一个点赞和关注都是对我最大的支持和鼓励,也是推动我继续创作优质内容的动力。

📚 我承诺,将持续为您带来深度与广度兼具的生物信息学内容,让我们一起在知识的海洋中遨游,发现更多未知的奇迹。

💌 如果您有任何问题或想要进一步交流,欢迎在评论区留言,我会尽快回复您。

相关推荐
BrianGriffin12 小时前
get_download_file_path: command not found (asdf bug已解决)
bug
咸虾米_13 小时前
解决九两酒商城[uni-pay-co]: Error:执行失败,积 分需要大于等于1的bug
bug·unicloud云开发·微信小程序商城·uniapp项目
凯子坚持 c13 小时前
Git分支实战指南:如何优雅地管理版本、修复Bug并解决合并冲突
git·bug
北冥有渔jy14 小时前
BT6.0常见的BUG
网络·安全·bug·蓝牙
测试19981 天前
一个只能通过压测发现Bug
自动化测试·软件测试·python·selenium·测试工具·bug·压力测试
狂奔的sherry2 天前
网卡获取模组ip失败问题解析
bug
nnsix2 天前
Unity ReferenceFinder插件 多选资源查找bug解决
unity·游戏引擎·bug
中冕—霍格沃兹软件开发测试2 天前
边界值分析:功能测试中的精度利器
人工智能·功能测试·科技·测试工具·appium·bug
中冕—霍格沃兹软件开发测试3 天前
探索性测试:思维驱动下的高效缺陷狩猎
人工智能·科技·开源·appium·bug
中冕—霍格沃兹软件开发测试3 天前
Git版本控制在测试项目管理中的应用
人工智能·git·科技·开源·appium·bug