下载
地址:http://blog.sina.com.cn/s/blog_65ba09d90101ddsh.html
安装
tar -jxf samtools-1.9.tar.bz2cd samtools-1.9/makeecho 'export PATH=/home/li.han/Softwares/samtools-1.9:$PATH' >> ~/.bashrc
用法
faidx
功能:提取fasta的长度信息
用法:samtools asidx <in.fasta> [<reg>[...]]
#生成一个名为ref.fa.fai的长度信息文件samtools faidx ref.fa
view
功能:
将sam文件转换成bam文件;
对bam文件进行各种操作,比如数据的排序(不属于本命令的功能)和提取(这些操作是对bam文件进行的,因而当输入为sam文件的时候,不能进行该操作);
将排序或提取得到的数据输出为bam或sam(默认的)格式。
bam文件优点:bam文件为二进制文件,占用的磁盘空间比sam文本文件小;利用bam二进制文件的运算速度快。
用法:samtools view [options] <in.bam>|<in.sam>|<in.cram> [region ...]
参数:
-b | 输出BAM格式的文件 |
-f int | 获得mapped过滤设置,0为未设置 |
-F int | 获得unmapped过滤设置,0为未设置。 数字4代表该序列没有比对到参考序列上 数字8代表该序列的mate序列没有比对到参考序列上 |
-h | 默认输出的 sam 格式文件不带 header,该参数设定输出sam文件时带 header 信息 |
-H | 只打印header部分(no alignments) |
-o FILE | 设置输出文件名 |
-q int | 最小的比对质量值 [0] |
-S | 若是输入是 SAM 文件(默认输入是 BAM 文件),则最好加该参数,否则有时候会报错。 |
-t FILE | 使用一个list文件来作为header的输入,一个制表分隔符的文件,对ref.fa使用命令“samtools faidx <ref.fa>”后,获得索引文件ref.fa.fai,使用此索引文件即可 |
-T FILE | 使用序列fasta文件作为header的输入 |
-u FILE | 输出非压缩的BAM,该参数的使用需要有-b参数,能节约时间,但是需要更多磁盘空间。 |
-@ INT | 设置线程数 |
示例:
#bam转samsamtools view -h in.bam > out.sam#sam转bamsamtools view -bS in.sam -t ref.fa.fai > out.bam#输出没有比对上的read:samtools view -f 0x4 in.bam > out.sam#提取比对到参考序列上的比对结果samtools view -bF 4 abc.bam > abc.F.bam#提取paired reads中两条reads都比对到参考序列上的比对结果,只需要把两个4+8的值12作为过滤参数即可samtools view -bF 12 abc.bam > abc.F12.bam#提取没有比对到参考序列上的比对结果samtools view -bf 4 abc.bam > abc.f.bam#提取bam文件中比对到caffold1上的比对结果,并保存到sam文件格式samtools view abc.bam scaffold1 > scaffold1.sam#提取scaffold1上能比对到30k到100k区域的比对结果samtools view abc.bam scaffold1:30000-100000 > scaffold1_30k-100k.sam#根据fasta文件,将 header 加入到 sam 或 bam 文件中samtools view -T genome.fasta -h scaffold1.sam > scaffold1.h.sam
sort
功能:对bam文件进行排序,不能对sam文件进行排序,默认按染色体名称和位置大小顺序
用法:samtools sort [options] <in.bam> <out.prefix>
参数:
-l INT | 小写L,设置输出文件压缩等级。0-9,0是不压缩,9是压缩等级最高。不设置此参数时,使用默认压缩等级 |
-m INT | 设置每个线程运行时的内存大小,可以使用K、M和G表示内存大小 |
-n | 按read名称排序 |
-o FILE | 将结果输出到指定文件而不是标准输出 |
-O FORMAT | 设置最终输出的文件格式,可以是bam,sam或者cram,默认为bam |
-T PREFIX | 设置临时文件的前缀 |
-@ INT | 设置排序和压缩是的线程数量,默认是单线程 |
示例:
#输出为out.bamsamtools sort -l 9 -m 90M -T sorted -@ 2 in.bam out #老用法或samtools sort -l 9 -m 90M -T sorted -@ 2 -o out.bam in.bam
index
功能:对已经sort的bam文件进行建库,生成.bai文件
必须对bam文件进行默认情况下的排序后,才能进行index。否则会报错。建立索引后将产生后缀为.bai的文件,用于快速的随机处理。很多情况下需要有bai文件的存在,特别是显示序列比对情况下。
用法:samtools index <in.bam> [out.index]
参数:
-b | 创建bai索引文件,未指定输出格式时,此参数为默认参数 |
-c | 创建csi索引文件,默认情况下,索引的最小间隔值为2^14,与bai格式一致 |
-m INT | 创建csi索引文件,最小间隔值2^INT |
-@ INT | 设置线程数 |
示例:
#输出文件为in.bam.baisamtools index in.bam
tview
功能:将已经sort的bam文件比对结果形象化和可视化,使用不同的颜色区分比对质量和碱基质量
用法:samtools tview <aln.bam> [ref.fasta]
示例:
samtools tview in.bam ref.fa
说明:运行上述命令,进入可视化界面后,按“?”查看帮助信息;按“g”,输入:chr:position即可去到相应的位置
flagstat
功能:对bam文件统计比对情况
用法:samtools flagstat <in.bam>
示例:
samtools flagstat in.bam
merge
功能:合并多个不同的bam文件
用法:samtools merge [-nr] [-h inh.sam] <out.bam> <in1.bam> <in2.bam> [...]
参数:
-f | 强制覆盖已经存在的bam |
-h file | 把file作为输出bam的header |
-l | 小写L,压缩等级1 |
-n | 合并后的bam按read名称排序 |
-r | 加上RG标签(inferred from file names) |
-R str | 在特殊区域str内合并 |
-u | 输出非压缩的bam |
示例:
samtools merge -h in.header out.bam in1.bam in2.bam ...
请问对于同一份BAM文件使用samtools depth和用samtools mpileup跑出来的位点的depth有何差异?
你会注意到这个差异,应该是由于你所用的是Pair-End(PE)测序的数据吧,如果是SE数据,差异其实很小。对于PE测序数据主要有两个地方的差异:

(1)第一个差异,对于PE数据,mpileup默认会把不正常比对的PE Read(比如read1和read2的比对位置彼此间的距离超过插入片段长度的波动范围或者read1与read2有一条没有比对上)先排除掉再做计算,但samtools depth则不会,depth默认不做任何过滤,只要比上就算。这也是我们会看到samtools depth计算的覆盖深度往往都高于mpileup的最主要原因。如果要让两者一致,可以在mpileup中加上 -A 参数,强制留下不正常的PE比对结果即可;
(2)它们之间的第二个差异是,在默认情况下,mpileup还会过滤掉测序质量值低于13的碱基,depth默认不过滤。
虽然调整一下参数就可以保证两者一样。但我并不建议这么做,虽说mpileup这里得到的是高质量的覆盖深度,但是说到底它和samtools depth的目的还是不同的。
此外,如果要更好地计算比对数据的覆盖深度和覆盖度的话,samtools depth虽然能够胜任,但是功能还是比较单一,而且由于每个位点都会输出,导致结果文件总是很巨大,我还是比较推荐使用bedtools2来完成,如下图,它的功能和输出形式要更加丰富。
bedtools2计算基因组覆盖度的不同模式
评论专区