Linux 下 BWA 与 SAMtools 的安装与使用详解
在高通量测序(NGS)数据分析领域,将测序得到的短序列(Reads)回贴到参考基因组上是几乎所有下游分析(如变异检测、基因表达定量等)的关键第一步。BWA(Burrows-Wheeler Aligner)和 SAMtools 是这一流程中最核心、最广泛使用的工具集之一。
- BWA: 一款非常高效的短序列比对软件,它利用 Burrows-Wheeler 变换(BWT)算法,能够在保证准确性的同时,快速地将大量短序列比对到参考基因组上。
- SAMtools: 一个用于处理 SAM(Sequence Alignment/Map)和 BAM(Binary Alignment/Map)格式比对文件的工具集。BAM 是 SAM 的二进制压缩版本。SAMtools 提供了查看、排序、索引、合并、提取比对数据等强大功能,是操作比对结果的“瑞士军刀”。
本文将提供一份从零开始的详细指南,涵盖在 Linux 环境下 BWA 和 SAMtools 的编译安装、基本使用方法、常用命令组合以及最佳实践。
目录#
环境准备#
在开始之前,请确保你的 Linux 系统满足以下条件:
- 操作系统: 常见的 Linux 发行版,如 Ubuntu, CentOS, Red Hat 等。
- 编译器: 需要安装 C 编译器(如
gcc)和make工具。- 在 Ubuntu/Debian 上:
sudo apt-get update && sudo apt-get install build-essential - 在 CentOS/RHEL 上:
sudo yum groupinstall "Development Tools"
- 在 Ubuntu/Debian 上:
- 依赖库: SAMtools 需要
zlib和ncurses开发库。- 在 Ubuntu/Debian 上:
sudo apt-get install zlib1g-dev libncurses5-dev - 在 CentOS/RHEL 上:
sudo yum install zlib-devel ncurses-devel
- 在 Ubuntu/Debian 上:
- 包管理器(可选): 推荐安装
Conda(Miniconda 或 Anaconda),它可以极大地简化生物信息学软件的安装和管理。
安装 BWA#
使用源码编译安装(推荐)#
这种方式能获得最新的版本和最好的性能控制。
-
下载源码: 访问 BWA 在 GitHub 的 发布页面,找到最新的稳定版源码包(如
bwa-0.7.17.tar.bz2)。使用wget下载。wget https://github.com/lh3/bwa/releases/download/v0.7.17/bwa-0.7.17.tar.bz2 -
解压并编译:
tar -xjvf bwa-0.7.17.tar.bz2 cd bwa-0.7.17 make编译成功后,当前目录会生成一个名为
bwa的可执行文件。 -
添加到环境变量(可选但推荐): 为了能在任何目录下直接使用
bwa命令,可以将其移动到系统路径,例如/usr/local/bin(需要 root 权限):sudo cp bwa /usr/local/bin/或者,将其添加到你的个人
~/.bashrc文件中:echo 'export PATH=$PATH:/path/to/your/bwa-0.7.17' >> ~/.bashrc source ~/.bashrc -
验证安装:
bwa如果安装成功,会输出 BWA 的帮助信息。
使用 Conda 安装(更简单)#
如果你已经安装了 Conda(如 Bioconda 频道),安装过程会非常简单。
-
添加 Bioconda 频道(如果尚未添加):
conda config --add channels bioconda conda config --add channels conda-forge -
创建并激活一个虚拟环境(推荐,用于管理依赖):
conda create -n ngs-tools bwa conda activate ngs-tools -
直接安装 BWA:
conda install bwaConda 会自动解决所有依赖关系。
-
验证安装:
bwa
安装 SAMtools#
安装过程与 BWA 类似。
使用源码编译安装#
-
下载源码: 访问 SAMtools 的 官方网站 或 GitHub 页面下载源码。
wget https://github.com/samtools/samtools/releases/download/1.17/samtools-1.17.tar.bz2 -
解压、配置并编译:
tar -xjvf samtools-1.17.tar.bz2 cd samtools-1.17 ./configure --prefix=/your/installation/path # 如果不指定--prefix,默认安装到/usr/local make sudo make install # 如果配置了prefix且你有写入权限,可能不需要sudo--prefix参数指定安装目录。 -
验证安装:
samtools
使用 Conda 安装#
在之前创建的 ngs-tools 环境中,直接安装:
conda activate ngs-tools
conda install samtools验证安装:samtools。
BWA 的使用#
准备工作:为参考基因组建立索引#
在进行比对之前,必须先为参考基因组(FASTA 格式,如 hg19.fa)建立 BWA 索引。这是一个一次性但计算密集的步骤。
命令:
bwa index /path/to/reference/genome.fa常见选项:
-a: 指定索引算法。对于大型基因组(如人类基因组),使用默认的bwtsw算法即可。对于小型基因组(如细菌),可以使用is算法。bwa index -a bwtsw genome.fa
索引完成后,会生成多个以 genome.fa 为前缀的索引文件(如 .amb, .ann, .bwt, .pac, .sa)。后续比对时需要的是原始的 genome.fa 文件,BWA 会自动识别这些索引文件。
序列比对:bwa mem 算法#
bwa mem 是当前最推荐的算法,尤其适用于 Illumina 的 70bp-1Mbp 的序列。
基本语法:
bwa mem [options] <reference.fa> <read1.fq> [<read2.fq>] > output.samreference.fa: 已建立索引的参考基因组路径。read1.fq/read2.fq: 测序 reads 文件。如果是单端测序,只提供一个文件;如果是双端测序,提供两个文件。> output.sam: 将标准输出重定向到output.sam文件。
示例:
-
单端测序比对:
bwa mem -t 8 human_g1k_v37.fa sample_single.fq > sample_se.sam -
双端测序比对:
bwa mem -t 8 human_g1k_v37.fa sample_1.fq sample_2.fq > sample_pe.sam
重要选项:
-t <INT>: 指定使用的线程数,可以显著加快比对速度。例如-t 8表示使用 8 个 CPU 核心。-R <STR>: 设置 SAM 文件头中的@RG读组信息,非常重要!它包含样本、文库、平台等信息,是下游分析(如 GATK 变异检测)所必需的。格式为'@RG\tID:foo\tSM:bar\tLB:library1\tPL:ILLUMINA'。ID: 读组唯一标识符。SM: 样本名。LB: 文库名。PL: 测序平台(如 ILLUMINA, PACBIO)。- 最佳实践示例:
bwa mem -t 8 -R '@RG\tID:Sample1\tSM:Sample1\tLB:LIB1\tPL:ILLUMINA' \ human_g1k_v37.fa sample_1.fq sample_2.fq > sample_with_rg.sam
-M: 将较短的 split hits 标记为次要比对,方便 Picard 兼容。
其他算法简介#
bwa aln/bwa sampe/bwa samse: 这是 BWA 的旧版算法。对于非常短的序列(< 70bp)可能比mem更准确,但现在已较少使用。bwa bwasw: 用于比对长序列,如 PacBio 或 Oxford Nanopore 测序数据。
SAMtools 的使用#
BWA 产生的 SAM 文件是文本格式,体积庞大,不利于存储和快速处理。SAMtools 主要用于将其转换为二进制 BAM 格式并进行后续处理。
格式转换:SAM 与 BAM 互转#
将 SAM 转换为 BAM(view 命令):
samtools view -@ 8 -Sb input.sam > output.bam-S: 自动识别输入格式(可省略,新版本已默认)。-b: 输出为 BAM 格式。-@: 指定线程数,加快处理速度。
将 BAM 转换为 SAM:
samtools view -@ 8 -h input.bam > output.sam-h: 在输出中包含 SAM 头信息(以@开头的行),非常重要!没有这个选项,头信息会被丢弃。
排序:按坐标或名称排序#
比对后的文件通常是无序的。按基因组坐标排序是许多下游分析(如变异检测)的必要步骤。
按坐标排序(sort 命令):
samtools sort -@ 8 -o sorted.bam input.bam-@: 指定线程数。-o: 指定排序后的输出文件名。- 默认按坐标排序。排序后会生成
sorted.bam。
按 reads 名称排序:
samtools sort -@ 8 -n -o name_sorted.bam input.bam-n: 按 reads 名称排序,在某些特定分析中会用到。
索引:建立快速检索索引#
对于坐标排序后的 BAM 文件,必须建立索引(生成 .bai 文件),才能实现快速随机访问(如查看特定区域的比对情况)。
为 BAM 文件建立索引(index 命令):
samtools index sorted.bam这会生成一个 sorted.bam.bai 索引文件。
查看:快速浏览比对结果#
查看 BAM 文件头信息:
samtools view -H sorted.bam查看特定基因组区域的比对情况: 需要先建立索引。
samtools view sorted.bam chr1:1000000-1005000使用 tview 进行交互式查看(非常直观):
samtools tview sorted.bam reference.fa过滤与统计#
过滤比对结果: 使用 view 命令的 -f(保留符合标志的)和 -F(过滤掉符合标志的)选项。
- 提取唯一比对的 reads(常见的过滤条件):
samtools view -@ 8 -b -F 4 -q 1 input.bam > unique_mapped.bam-F 4: 过滤掉未比对的 reads(SAM 标志位 4 表示未比对)。-q 1: 只保留 Mapping Quality >= 1 的 reads,通常可以过滤掉重复和低质量比对。
统计比对信息(flagstat 命令):
快速生成比对的统计报告,非常有用。
samtools flagstat sorted.bam输出会显示总 reads 数、比对上的 reads 数、 properly paired 的 reads 数等。
完整流程示例#
下面是一个从原始 fastq 文件到最终排序去重 BAM 文件的完整、高效的命令行流程(使用管道,避免生成中间文件)。
# 假设参考基因组是 ref.fa,并且已建立索引
# 双端测序文件: read_1.fastq, read_2.fastq
# 1. 使用BWA进行比对,并直接通过管道传递给samtools转换为BAM
# 2. 对BAM文件按坐标排序
# 3. 将排序后的BAM文件输出到 sorted.bam
bwa mem -t 8 -R '@RG\tID:MySample\tSM:MySample\tPL:ILLUMINA' \
ref.fa read_1.fastq read_2.fastq | \
samtools view -@ 4 -Sb - | \
samtools sort -@ 4 -o sorted.bam -
# 为最终的BAM文件建立索引
samtools index sorted.bam
# 生成比对统计报告
samtools flagstat sorted.bam > flagstat.txt解释:
|(管道): 将上一个命令的输出直接作为下一个命令的输入,省去了生成巨大 SAM 文件的步骤,节省磁盘 I/O 和时间。-: 在管道中代表标准输入或标准输出。
最佳实践与常见问题#
- 始终使用
-R参数: 在bwa mem中设置读组信息,这是下游分析的基础。 - 使用多线程: BWA(
-t)和 SAMtools(-@)都支持多线程,能极大提升处理速度。 - 使用管道: 将
bwa mem | samtools view | samtools sort串联起来,避免生成巨大的中间 SAM 文件。 - 质量控制: 在比对前,建议先使用 FastQC 对原始 fastq 文件进行质量检查,并使用 Trimmomatic 或 fastp 等进行质量控制和过滤。
- 标记重复: 排序后的 BAM 文件通常还需要使用 Picard 或 SAMtools 的
markdup命令来标记 PCR 重复,这是变异检测前的标准步骤。samtools markdup -@ 8 sorted.bam marked_duplicates.bam - 常见错误:
- BWA 报错 "fail to locate the index": 确保参考基因组文件(
.fa)和它的索引文件(.amb,.bwt等)在同一个目录下,并且 BWA 命令中指定的路径正确。 - SAMtools 报错 "samtools index: failed to create index": 确保 BAM 文件是已经按坐标排序过的。未排序的 BAM 文件不能建立索引。
- BWA 报错 "fail to locate the index": 确保参考基因组文件(
总结#
BWA 和 SAMtools 是 NGS 数据分析基石般的工具。通过本文的指南,你应该已经掌握了如何在自己的 Linux 系统上安装这两个工具,并理解了从序列比对到生成排序、索引 BAM 文件的完整流程。记住核心步骤:建立索引 -> BWA比对 -> SAM转BAM -> 排序 -> 建索引。熟练运用这些命令,结合多线程和管道技巧,你将能高效地处理海量的测序数据。
参考资料#
- BWA 官方手册:
man bwa或 李恒的BWA页面 - SAMtools/htslib 官方文档:
man samtools或 htslib.org - SAM 格式说明: SAM Format Specification
- Bioconda: https://bioconda.github.io/
- GATK Best Practices: https://gatk.broadinstitute.org/hc/en-us/sections/360007226651-Best-Practices-Workflows (了解读组信息的重要性)