1371 words
7 minutes
Samtools 使用笔记
2026-05-13
2026-05-20

Samtools 是一套用于操作 SAM (Sequence Alignment/Map)、BAM 和 CRAM 格式文件的工具集。它能够转换格式、排序、合并和索引,还可以快速检索任何区域的读段。

主要命令#

1. view#

samtools view [options] in.sam|in.bam|in.cram [region...]

查看比对文件内容,可转换格式、过滤区域。默认输出为 SAM 格式。

2. tview#

samtools tview [-p chr:pos] [-s STR] [-d display] in.sorted.bam [ref.fasta]

文本比对查看器,基于 ncurses 库,可用于交互式查看比对结果。

3. quickcheck#

samtools quickcheck [options] in.sam|in.bam|in.cram [...]

快速检查输入文件是否完整,检查文件头和 EOF 块。

4. checksum#

samtools checksum [options] in.sam|in.bam|in.cram

生成 BAM 文件的 CRC32 校验和。

5. head#

samtools head [options] in.sam|in.bam|in.cram

打印文件头和可选的前几个比对记录。

6. index#

samtools index [-bc] [-m INT] in.sam.gz|in.bam|in.cram [out.index]

为坐标排序的 SAM、BAM 或 CRAM 文件创建索引,用于快速随机访问。

7. sort#

samtools sort [-l level] [-m maxMem] [-o out.bam] [-O format] [-n] [-t tag] [-T tmpprefix] [-@ threads] [in.sam|in.bam|in.cram]

按左端坐标或读段名称排序比对文件。

8. collate#

samtools collate [options] in.sam|in.bam|in.cram [<prefix>]

按名称分组读段,比完全排序更快。

9. cram-size#

samtools cram-size [options] in.cram

显示 CRAM 文件中块内容 ID 和相关数据系列的摘要。

10. idxstats#

samtools idxstats in.sam|in.bam|in.cram

从索引文件获取统计信息。

11. flagstat#

samtools flagstat in.sam|in.bam|in.cram

对输入文件进行完整遍历,计算并打印统计信息。

12. flags#

samtools flags INT|STR[,...]

在文本和数值标志表示之间转换。

13. stats#

samtools stats [options] in.sam|in.bam|in.cram [region...]

收集 BAM 文件的统计信息。

14. bedcov#

samtools bedcov [options] region.bed in1.sam|in1.bam|in1.cram[...]

报告 BED 文件中每个基因组区域的总读段碱基数。

15. depth#

samtools depth [options] [in1.sam|in1.bam|in1.cram [in2.sam|in2.bam|in2.cram] [...]]

计算每个位置或区域的读段深度。

16. ampliconstats#

samtools ampliconstats [options] primers.bed in.sam|in.bam|in.cram[...]

收集输入比对文件的统计信息。

17. mpileup#

samtools mpileup [options] in.bam [in2.bam [in3.bam [...]]]

生成文本 pileup 格式,用于 VCF/BCF 输出请使用 bcftools mpileup 命令。

18. consensus#

samtools consensus [options] in.bam

基于比对记录生成共识序列。

19. reference#

samtools reference [options] in.bam

基于比对记录生成参考序列。

20. coverage#

samtools coverage [options] [in1.sam|in1.bam|in1.cram [in2.sam|in2.bam|in2.cram] [...]]

生成染色体覆盖度直方图或表格。

21. merge#

samtools merge [-nur1f] [-h inh.sam] [-t tag] [-R reg] [-b list] out.bam in1.bam [in2.bam in3.bam ... inN.bam]

合并多个排序的比对文件。

22. split#

samtools split [options] merged.sam|merged.bam|merged.cram

按读组拆分文件。

23. cat#

samtools cat [-b list] [-h header.sam] [-o out.bam] in1.bam in2.bam [ ... ]

连接 BAM 或 CRAM 文件。

24. import#

samtools import [options] in.fastq [ ... ]

将 FASTQ 文件转换为未对齐的 SAM、BAM 或 CRAM 格式。

25. fastq/a#

samtools fastq [options] in.bam
samtools fasta [options] in.bam

将 BAM 或 CRAM 转换为 FASTQ 或 FASTA 格式。

26. faidx#

samtools faidx <ref.fasta> [region1 [...]]

索引 FASTA 格式参考序列或从索引的参考序列中提取子序列。

27. fqidx#

samtools fqidx <ref.fastq> [region1 [...]]

索引 FASTQ 格式参考序列或从索引的参考序列中提取子序列。

28. dict#

samtools dict ref.fasta|ref.fasta.gz

从 FASTA 文件创建序列字典文件。

29. calmd#

samtools calmd [-Eeubr] [-C capQcoef] aln.bam ref.fasta

生成 MD 标签。

30. fixmate#

samtools fixmate [-rpcm] [-O format] in.nameSrt.bam out.bam

填充 mate 坐标、ISIZE 和 mate 相关标志。

31. markdup#

samtools markdup [-l length] [-r] [-s] [-T] [-S] in.algsort.bam out.bam

标记坐标排序文件中的重复比对。

32. addreplacerg#

samtools addreplacerg [-r rg-line | -R rg-ID] [-m mode] [-l level] [-o out.bam] in.bam

添加或替换文件中的读组标签。

33. reheader#

samtools reheader [-iP] in.header.sam in.bam

用新的头替换 BAM 文件的头。

34. targetcut#

samtools targetcut [-Q minBaseQ] [-i inPenalty] [-0 em0] [-1 em1] [-2 em2] [-f ref] in.bam

通过检查读段深度识别目标区域。

35. phase#

samtools phase [-AF] [-k len] [-b prefix] [-q minLOD] [-Q minBaseQ] in.bam

调用和分型杂合 SNP。

36. depad#

samtools depad [-SsCu1] [-T ref.fa] [-o output] in.bam

将对齐到填充参考的 BAM 转换为对齐到去填充参考的 BAM。

37. ampliconclip#

samtools ampliconclip [-o out.file] [-f stat.file] [--soft-clip] [--hard-clip] [--both-ends] [--strand] [--clipped] [--fail] [--no-PG] -b bed.file in.file

根据 BED 文件中的数据剪切 SAM 兼容文件中的读段。

38. samples#

samtools samples [-o out.file] [-i] [-T TAG] [-f refs.fasta] [-F refs_list] [-X]

打印比对文件中的样本信息。

39. reset#

samtools reset [-o FILE] [-x/--remove-tag tag_list] [--keep-tag tag_list] [--reject-PG pgid] [--no-RG] [--no-PG] [...]

从记录中移除比对信息,生成未对齐的 SAM、BAM 或 CRAM 文件。

常用选项#

全局命令选项#

  • --input-fmt:指定输入格式
  • --input-fmt-option:指定输入格式选项
  • --output-fmt:指定输出格式
  • --output-fmt-option:指定输出格式选项
  • --reference:指定参考序列文件
  • --write-index:自动创建索引
  • --verbosity:设置详细级别

常见格式选项#

  • level=INT:压缩级别(1-9)
  • nthreads=INT:指定线程数
  • filter=STRING:应用过滤器表达式
  • reference=fasta_file:指定 FASTA 参考文件
  • version=major.minor:指定 CRAM 版本
  • fast, normal, small, archive:设置 CRAM 压缩配置文件

标志位说明#

标志位说明
PAIRED0x1成对测序技术
PROPER_PAIR0x2按比对器要求正确配对
UNMAP0x4比对未映射
MUNMAP0x8模板中下一个片段未映射
REVERSE0x10序列被反向互补
MREVERSE0x20模板中下一个片段序列被反向互补
READ10x40模板中第一个片段
READ20x80模板中最后一个片段
SECONDARY0x100次级比对
QCFAIL0x200未通过质量控制
DUP0x400PCR 或光学重复
SUPPLEMENTARY0x800补充比对

环境变量#

  • HTS_PATH:HTSlib 插件搜索路径
  • REF_PATH:参考序列搜索路径
  • REF_CACHE:本地参考序列缓存目录

示例用法#

基本转换#

Terminal window
# SAM转BAM
samtools view -b aln.sam > aln.bam
# BAM转CRAM
samtools view -C -T ref.fa aln.bam > aln.cram

索引和排序#

Terminal window
# 创建索引
samtools index aln.bam
# 排序
samtools sort -o sorted.bam aln.bam

统计分析#

Terminal window
# 查看比对统计
samtools flagstat aln.bam
# 查看覆盖度
samtools depth aln.bam
# 查看索引统计
samtools idxstats aln.bam

数据过滤#

Terminal window
# 只显示特定区域
samtools view aln.bam chr1:1000000-2000000
# 过滤低质量读段
samtools view -q 20 aln.bam

参考资料#

Samtools 使用笔记
https://blog.lihuax.online/posts/work/dev/samtools/
Author
Lihuax
Published at
2026-05-13
License
CC BY-NC-SA 4.0