文章目錄
- @[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進行合并,可以大大縮短合并時間,提升分析效率。
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 使用文件列表合并
當樣品較多時,推薦先生成一個文件列表:
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
索引文件。 - 可用如下命令檢查和轉換:
bgzip sample.vcf tabix -p vcf sample.vcf.gz
2.2 樣本名唯一性
- 每個VCF文件的樣本名必須唯一,不能有重復。
- 可用如下命令檢查樣本名:
bcftools query -l sample1.vcf.gz
2.3 檢查文件模式匹配
- 避免通配符匹配到同一樣本的多個文件(如
sample1_filtered.vcf.gz
和sample1_tmp_filtered.vcf.gz
)。 - 推薦只保留每個樣本的最終過濾文件。
三、常見報錯與解決方法
3.1 報錯:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway.
原因:合并的VCF文件中有重復的樣本名。
解決方法:
- 檢查文件列表,確保每個樣本只出現一次。
- 可用如下腳本自動檢查并生成唯一文件列表:
# scripts/check_duplicate_samples.py
# 用法:python scripts/check_duplicate_samples.py 'aa*/aa*_filtered.vcf.gz' unique_vcf_list.txt
- 合并時用唯一文件列表:
bcftools merge -Oz -o merged_filtered_snps.vcf.gz -l unique_vcf_list.txt
3.2 報錯:Could not retrieve index file for ...
原因:缺少.tbi
索引文件。
解決方法:
tabix -p vcf sample.vcf.gz
四、自動化腳本推薦
4.1 檢查并轉換VCF為bgzip格式
# scripts/check_and_convert_vcf.py
# 用法:python scripts/check_and_convert_vcf.py 'aa*/aa*_filtered.vcf*'
4.2 檢查重復樣本并生成唯一文件列表
# scripts/check_duplicate_samples.py
# 用法:python scripts/check_duplicate_samples.py 'aa*/aa*_filtered.vcf.gz' unique_vcf_list.txt
4.3 合并并生成統計
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表格
# scripts/vcf_to_txt.py
# 用法:python scripts/vcf_to_txt.py merged_filtered_snps.vcf.gz
5.2 統計每個樣品的SNP數
# scripts/count_snp_per_sample.py
# 用法:python scripts/count_snp_per_sample.py merged_filtered_snps.vcf.gz
六、總結
- 合并VCF前請確保每個樣品只保留一個最終VCF文件,且為bgzip格式并有索引。
- 合并時推薦用文件列表,避免通配符誤操作。
- 遇到重復樣本名、缺少索引等報錯時,優先檢查文件列表和文件格式。
- 可用Python腳本自動化檢查、轉換和統計,提升效率。
如需腳本源碼或Snakemake自動化流程,可私信或評論獲取!
🌟 非常感謝您抽出寶貴的時間閱讀我的文章。如果您覺得這篇文章對您有所幫助,或者激發了您對生物信息學的興趣,我誠摯地邀請您:
👍 點贊這篇文章,讓更多人看到我們共同的熱愛和追求。
🔔 關注我的賬號,不錯過每一次知識的分享和探索的旅程。
📢 您的每一個點贊和關注都是對我最大的支持和鼓勵,也是推動我繼續創作優質內容的動力。
📚 我承諾,將持續為您帶來深度與廣度兼具的生物信息學內容,讓我們一起在知識的海洋中遨游,發現更多未知的奇跡。
💌 如果您有任何問題或想要進一步交流,歡迎在評論區留言,我會盡快回復您。