第4章 bcftools工具入门:安装、基本命令与使用示例
做VCF一致性评估,bcftools是绕不开的核心工具。说白了,它就是处理VCF/BCF文件的瑞士军刀。我最早接触它的时候还是1.9版本,现在都到1.19了,但核心命令的思路一直没变。
这一章我们就把bcftools装好,再把最常用的几个命令摸透。你跟着我做一遍,后面分析多批次VCF时会顺手很多。
4.1 安装bcftools
安装方式有两种,我分别说一下。
4.1.1 从源码编译(推荐)
我个人习惯用源码编译,因为能控制依赖版本。你别怕编译,几步就完事。
# 下载源码
wget https://github.com/samtools/bcftools/releases/download/1.19/bcftools-1.19.tar.bz2
tar -xjf bcftools-1.19.tar.bz2
cd bcftools-1.19
# 配置与编译
./configure --prefix=/usr/local/bcftools
make -j4
make install
# 加入环境变量
echo 'export PATH=/usr/local/bcftools/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
4.1.2 用包管理器安装
如果你在Ubuntu/Debian上图省事,可以用apt直接装。但我建议别用这个版本做生产分析,因为包管理器里的版本通常落后一两年。
sudo apt update
sudo apt install bcftools
# 验证安装
bcftools --version
4.1.3 验证安装
装完之后跑一下版本号。看到类似下面的输出,就算成了。
bcftools --version
bcftools 1.19
Using htslib 1.19
Copyright (C) 2024 Genome Research Ltd.
bcftools test 命令就能生成一个样例VCF,用来验证环境。
4.2 三个核心命令:view、query、stats
bcftools有几十个子命令,但做一致性评估最常用就是这三个。我按使用频率排个序。
| 命令 | 用途 | 我常用的场景 |
|---|---|---|
view | VCF的查看、过滤、转换 | 提取特定样本、按质量过滤 |
query | 自定义格式输出字段 | 提取GT、DP做统计分析 |
stats | 生成质量统计摘要 | 对比多批次数据质量 |
4.2.1 view命令
view是最基础的命令。它能把VCF转成文本看,也能做各种过滤。我平时用它80%的场景就是“看一眼数据长什么样”。
# 查看前10行
bcftools view input.vcf.gz | head -20
# 只看变异位点(过滤掉参考位点)
bcftools view -v snps input.vcf.gz
# 按样本提取
bcftools view -s sample1,sample2 input.vcf.gz
# 按区域提取
bcftools view -r chr1:100000-200000 input.vcf.gz
嗯,这里要注意:输出的格式默认是VCF。如果你想转成BCF(二进制格式),加个 -Ob 参数就行。BCF读起来快很多。
4.2.2 query命令
query是格式化输出神器。它可以把VCF里的信息按照你指定的顺序和格式打出来。我当时第一次用这个命令的时候,就觉得“终于不用写脚本解析VCF了”。
# 输出染色体、位置、参考碱基、突变碱基
bcftools query -f '%CHROM\t%POS\t%REF\t%ALT\n' input.vcf.gz
# 输出样本的基因型(GT)和测序深度(DP)
bcftools query -f '%CHROM\t%POS\t%GT\t%DP\n' -s sample1 input.vcf.gz
# 用列表形式输出所有样本的GT
bcftools query -l input.vcf.gz # 先看样本名
bcftools query -f '%CHROM\t%POS\t[\t%GT]\n' input.vcf.gz
%DP[\t. %DP] 做默认值处理。
4.2.3 stats命令
stats用来生成VCF的统计摘要。它是你评估VCF质量的第一道窗口。我每拿到一批新数据,第一件事就是跑一遍stats。
# 生成统计
bcftools stats input.vcf.gz > stats.txt
# 可以用plot-vcfstats直接出图(需要python和matplotlib)
plot-vcfstats -p output_dir/ stats.txt
stats输出的内容很丰富。我重点看这几个指标:
- SNP数量 vs Indel数量(正常比例应该在10:1到20:1之间)
- Ti/Tv比率(全基因组大约2.0-2.1,全外显子大约2.8-3.0)
- 缺失率(这个后面做一致性评估时特别关键)
4.3 实战:用bcftools跑一个完整的质检流程
理论知识说完了,我带你走一遍实际项目中的典型流程。假设你拿到了一个批次的三例样本VCF,想做快速质检。
4.3.1 数据准备
我先用bcftools test生成一个演示数据。这样你也能跟着跑。
# 生成演示数据
bcftools test > test_samples.vcf
# 压缩并建立索引(标准做法)
bgzip test_samples.vcf
tabix -p vcf test_samples.vcf.gz
4.3.2 查看基本信息
# 看样本名
bcftools query -l test_samples.vcf.gz
# 看有几个位点
bcftools view -H test_samples.vcf.gz | wc -l
# 看变异类型分布
bcftools view -H test_samples.vcf.gz | awk '{print $4"\t"$5}' | sort | uniq -c
4.3.3 质量过滤
实际项目中我通常会把质量很低的位点筛掉。标准做法是保留QUAL>30、缺失率<20%的位点。
# 按质量过滤
bcftools view -i 'QUAL>30 && F_MISSING<0.2' \
test_samples.vcf.gz \
-Oz -o filtered.vcf.gz
# 重新索引
tabix filtered.vcf.gz
4.3.4 生成统计报告
# 过滤前后对比
bcftools stats test_samples.vcf.gz > raw_stats.txt
bcftools stats filtered.vcf.gz > filter_stats.txt
# 看一眼关键的Ti/Tv
grep "Tstv" raw_stats.txt
grep "Tstv" filter_stats.txt
4.4 本章知识图谱
我画了一张流程图,帮你理清bcftools在VCF处理中的位置和本章知识点。
4.5 本章小结
这一章我们把bcftools装上了,也把view、query、stats三个命令跑通了。你可能注意到了,这些命令看起来简单,但配上不同的过滤表达式和格式控制符,能组合出非常强大的功能。
做一致性评估前,我建议你至少跑一遍stats看看数据底子。如果原始数据质量太差,后面的评估就没意义了。
- 安装后一定要跑
bcftools test验证环境 - view 用于看数据和过滤,query 用于提取字段,stats 用于质量评估
- 三个命令互相配合,能覆盖VCF处理的绝大多数场景