samtools常用命令详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了samtools常用命令详解相关的知识,希望对你有一定的参考价值。

参考技术A

samtools是一个用于操作sam和bam文件的工具集合。

view命令的主要功能是: 将输入文件转换成输出文件,通常是将比对后的sam文件转换为bam文件 ,然后对bam文件进行各种操作,比如数据的排序(和提取(这些操作是对bam文件进行的,因而当输入为sam文件的时候,不能进行该操作)。

view命令中,对sam文件头部的输入( -t 或 -T )和输出( -h )是单独的一些参数来控制的。

默认情况下不加 region,则是输出所有的 region.

Options:
   -b output BAM
    默认下输出是 SAM 格式文件,该参数设置输出 BAM 格式
   -h print header for the SAM output
    默认下输出的 sam 格式文件不带 header,该参数设定输出sam文件时带 header 信息
   -H print header only (no alignments)
   -S input is SAM
    默认下输入是 BAM 文件,若是输入是 SAM 文件,则最好加该参数,否则有时候会报错。
   -u uncompressed BAM output (force -b)
    该参数的使用需要有-b参数,能节约时间,但是需要更多磁盘空间。
   -c Instead of printing the alignments, only count them and print the total number. All filter options, such as ‘-f’, ‘-F’ and ‘-q’ , are taken into account.
   -1 fast compression (force -b)
   -x output FLAG in HEX (samtools-C specific)
   -X output FLAG in string (samtools-C specific)
   -c print only the count of matching records
   -L FILE output alignments overlapping the input BED FILE [null]
   -t FILE list of reference names and lengths (force -S) [null]
    使用一个list文件来作为header的输入
   -T FILE reference sequence file (force -S) [null]
    使用序列fasta文件作为header的输入
   -o FILE output file name [stdout]
   -R FILE list of read groups to be outputted [null]
   -f INT required flag, 0 for unset [0]
   -F INT filtering flag, 0 for unset [0]
    Skip alignments with bits present in INT [0]
     数字4代表该序列没有比对到参考序列上
     数字8代表该序列的mate序列没有比对到参考序列上
   -q INT minimum mapping quality [0]
   -l STR only output reads in library STR [null]
   -r STR only output reads in read group STR [null]
   -s FLOAT fraction of templates to subsample; integer part as seed [-1]
   -? longer help</pre>

如果没有指定option和region选项,则会在屏幕中显示sam格式的文件,如下所示。

例子:
(1)将sam文件和bam文件相互转换。注意: 没有header的sam文件不能转换成bam文件。

(2) 提取比对到参考序列上的比对结果 F

(3)提取paired reads中两条reads都比对到参考序列上的比对结果,只需要把两个4+8的值12作为过滤参数即可

(4) 提取没有比对到参考序列上的比对结果 f

(5)提取paired reads中比对到参考基因组上的数据

(6)提取bam文件中比对到caffold1上的比对结果,并保存到sam文件格式

(7)提取scaffold1上能比对到30k到100k区域的比对结果

(8)根据fasta文件,将 header 加入到 sam 或 bam 文件中

(9)sam 和 bam 格式转换

对bam文件进行排序,不能对sam文件进行排序。以leftmost coordinates的方式对比对结果进行排序,或者使用-n参数以read名称进行排序。将会添加适当的@HD-SO排序顺序标头标签或者如果有必要的话,将会更新现存的一个排序顺序标头标签。sort命令的输出默认是标准输出写入,或者使用-o参数时,指定bam文件输出名。sort命令还会在内存不足时创建临时文件tmpprefix.%d.bam

Options:
   -m 设置每个线程运行时的内存大小,可以使用K,M和G表示内存大小。默认下是 500,000,000 即500M。对于处理大数据时,如果内存够用,则设置大点的值,以节约时间。
   -n 设置按照read名称进行排序。默认下是按序列在fasta文件中的顺序(即header)和序列从左往右的位点排序。
   -l INT 设置输出文件压缩等级。0-9,0是不压缩,9是压缩等级最高。不设置此参数时,使用默认压缩等级;
   -o FILE 设置最终排序后的输出文件名;
   -O FORMAT 设置最终输出的文件格式,可以是bam,sam或者cram,默认为bam;
   -T PREFIX 设置临时文件的前缀;
   -@ INT 设置排序和压缩是的线程数量,默认是单线程。

例子:

当有多个样本的bam文件时,可以使用samtools的merge命令将这些bam文件进行合并为一个bam文件。。Merge命令将多个已经排序后的bam文件合并成为一个排序的且保持所有输入记录并保持现有排序顺序的bam文件。

Options:
   -1 指定压缩等级;
   -b FILE 输入文件列表,一个文件一行;
   -f overwrite the output BAM if exist 强制覆盖同名输出文件;
   -h FILE copy the header in FILE to <out.bam> [in1.bam]。 指定FILE内的’@’头复制到输出bam文件中并替换输出文件的文件头。否则,输出文件的文件头将从第一个输入文件复制过来;
   -n sort by read names。设定输入比对文件是以read名进行排序的而不是以染色体坐标排序的;
   -R STR merge file in the specified region STR [all]。合并输入文件的指定区域;
   -r attach RG tag (inferred from file names)。使RG标签添加到每一个比对文件上,标签值来自文件名;
   -u uncompressed BAM output。输出的bam文件不压缩;
   -c 当多个输入文件包含相同的@RG头ID时,只保留第一个到合并后输出的文件。当合并多个相同样本的不同文件时,非常有用。
   -p 与-c参数类似,对于要合并的每一个文件中的@PG ID只保留第一个文件中的@PG。
例子

Note: Samtools\' merge does not reconstruct the @RG dictionary in the header. Users must provide the correct header with -h, or uses Picard which properly maintains the header dictionary in merging.

为了能够快速访问bam文件,可以为已经基于坐标排序后bam或者cram的文件创建索引,生成以.bai或者.crai为后缀的索引文件。必须使用排序后的文件,否则可能会报错。另外,不能对sam文件使用此命令。如果想对sam文件建立索引,那么可以使用tabix命令创建。

Options:
   -b 创建bai索引文件,未指定输出格式时,此参数为默认参数;
   -c 创建csi索引文件,默认情况下,索引的最小间隔值为2^14,与bai格式一致;
   -m INT 创建csi索引文件,最小间隔值2^INT;

例子:

以下两种命令结果一样

对fasta文件建立索引,生成的索引文件以.fai后缀结尾。该命令也能依据索引文件快速提取fasta文件中的某一条(子)序列.如果没有指定区域,faidx命令就创建文件索引并生成后缀为.fai的索引文件。如果指定区域,那么就是生产并显示fasta格式的子序列。输入文件可以使BGZF压缩格式的文件。

输入文件中的序列要有不同的名称。如果不是这样,即存在相同名称的序列,在建立索引的过程中将发出有关重复序列的警告而且生产的同名子序列的信息都要被第一个同名子序列的信息覆盖。

例:对基因组文件建立索引

上图中先显示了待处理的test.fasta文件的内容,由4个长度不一的序列组成,其中前两个重名。然后使用faidx命令进行处理。最后在显示生产索引文件test.fasta.fai的内容。

生成了索引文件fasta.fai,是一个文本文件,分成了5列。

于是通过此文件,可以定位子序列在fasta文件在磁盘上的存放位置,直接快速调出子序列。

由于有索引文件,可以使用以下命令很快从基因组中提取到fasta格式的子序列

提取序列如下图:

tview能直观的显示出reads比对基因组的情况,和基因组浏览器有点类似。

当给出参考基因组的时候,会在第一排显示参考基因组的序列,否则,第一排全用N表示。
按下 g ,则提示输入要到达基因组的某一个位点。例子“scaffold_10:1000"表示到达第10号scaffold的第1000个碱基位点处。
使用H(左)J(上)K(下)L(右)移动显示界面。大写字母移动快,小写字母移动慢。
使用空格建向左快速移动(和 L 类似),使用Backspace键向左快速移动(和 H 类似)。
Ctrl+H 向左移动1kb碱基距离; Ctrl+L 向右移动1kb碱基距离
可以用颜色标注比对质量,碱基质量,核苷酸等。30~40的碱基质量或比对质量使用白色表示;20~30黄色;10~20绿色;0~10蓝色。
使用点号\'.\'切换显示碱基和点号;使用r切换显示read name等
还有很多其它的使用说明,具体按 ? 键来查看。

统计输入文件的相关数据并将这些数据输出至屏幕显示。每一项统计数据都由两部分组成,分别是QC pass和QC failed,表示通过QC的reads数据量和未通过QC的reads数量。以“PASS + FAILED”格式显示。

例如

得到每个碱基位点或者区域的测序深度,并输出到标准输出。depth命令计算每一个位点的测序深度并在标准显示设备中显示。 注意 :使用此命令之前必须先samtools index。

Options:
   -a 输出所有位点,包括零深度的位点;-a –a,--aa 完全输出所有位点,包括未使用到的参考序列;
   -b FILE 计算BED文件中指定位置或区域的深度;
   -f FiLE 使用在FILE中的指定bam文件;
   -I INT 忽略掉小于此INT值的reads;
   -q INT 只计算碱基质量值大于此值的reads;
   -Q INT 只计算比对质量值大于此值的reads;
   -r CHR:FROM –TO 只计算指定区域的reads,后面跟染色体号(region)

示例:

注意: in.bam 必须经过了排序。
depth命令运行如下图所示:

一共得到3列以指标分隔符分隔的数据,第一列为染色体名称,第二列为位点,第三列为覆盖深度。

该命令用于生成bcf文件,再使用bcftools进行SNP和Indel的分析。bcftools是samtool中附带的软件,在samtools的安装文件夹中可以找到。

Options:
   -f –来输入有索引文件的fasta参考序列;
   -F –gap-frac FLOAT 含有间隔reads的最小片段。
   -l –positions FILE BED文件或者包含区域位点的位置列表文件。位置文件包含两列,染色体和位置,从1开始计数。BED文件至少包含3列,染色体、开始位置和结束位置,开始端从0开始计数。
   -r –region STR 只在指定区域产生pileup,需要已建立索引的bam文件。通常和-l参数一起使用。
   -o –output FILE 生成pileup格式文件或者VCF、BCF文件而不是默认的标准输出。
   -g –BCF 计算基因型的似然值和输出文件格式为BCF。
   -v –VCF 计算基因型的似然值和输出文件格式为VCF。
   -C --adjust-MQ INT 用于降低比对质量的系数,如果reads中含有过多的错配。不能设置为零。BWA推荐值为50。
   -A --count-orphans 在检测变异中,不忽略异常的reads对。
   -D –输出每个样本的reads深度。
   -V –输出每个样本未比对到参考基因组的reads数量。
   -t –output-tags LIST设置FORMAT和INFO的列表内容,以逗号分割。
   -u –uncompressed 生成未压缩的VCF和BCF文件。
   -I –skip-indel 不检测INDEL。
   -m –min-ireads INT 候选INDEL的最小间隔的reads。

下面是一个使用-r参数和-l参数生成vcf文件的实例:

mpileup不使用-u或-g参数时,则不生成二进制的bcf文件,而生成一个文本文件(输出到标准输出)。该文本文件统计了参考序列中每个碱基位点的比对情况;该文件每一行代表了参考序列中某一个碱基位点的比对结果。比如:

mpileup生成的结果包含6行:参考序列名;位置;参考碱基;比对上的reads数;比对情况;比对上的碱基的质量。

其中第5列比较复杂,解释如下:

NGS上机测序前需要进行PCR一步,使一个模板扩增出一簇,从而在上机测序的时候表现出为1个点,即一个reads。若一个模板扩增出了多簇,结果得到了多个reads,这些reads的坐标(coordinates)是相近的。在进行了reads比对后需要将这些由PCR duplicates获得的reads去掉,并只保留最高比对质量的read。使用rmdup命令即可完成.

Options:
   -s 对single-end reads。默认情况下,只对paired-end reads
   -S 将Paired-end reads作为single-end reads处理。

检索和打印已建立索引的bam文件的统计数据,包括参考序列名称、序列长度、比对上的read数量和未比对上的read数量。输出结果显示在屏幕上,以制表符分割。

如下图所示:

idxstats 统计一个表格,4列,分别为”序列名,序列长度,比对上的reads数,unmapped reads number”。第4列应该是paired reads中有一端能匹配到该scaffold上,而另外一端不匹配到任何scaffolds上的reads数。

计算由BED文件指定的基因组区域内的总碱基数量。

如下图所示:

reheader 替换bam文件的头

cat 连接多个bam文件,适用于非sorted的bam文件

有时候,我们需要提取出比对到一段参考序列的reads,进行小范围的分析,以利于debug等。这时需要将bam或sam文件转换为fastq格式。
该网站提供了一个bam转换为fastq的程序: http://www.hudsonalpha.org/gsl/information/software/bam2fastq

1:从bam中过滤掉没有比对上的信息,并将比对上的部分保存到sam中

2:从bam中过滤没有比对上的信息,并保存到bam中:(要加-h,表示输出header)

注意:虽然有些没有比对上的结果 的flag值是141,77等,但是都可以用4过滤掉。

3:提取为fastq:主要参数为-f,-F,-G三个。
提取没有比对上的信息到fastq用:

提取比对上的reads到fastq用

REF:
https://www.plob.org/article/7112.html
http://www.chenlianfu.com/?p=1399
http://en.wikipedia.org/wiki/SAMtools
http://www.htslib.org/doc/samtools-1.1.html
http://sourceforge.net/projects/samtools/files/ http://samtools.sourceforge.net/samtools.shtml
https://www.cnblogs.com/emanlee/p/4316581.html

samtools faidx 命令处理fasta序列

samtools faidx 能够对fasta 序列建立一个后缀为.fai 的文件,根据这个.fai 文件和原始的fastsa文件, 能够快速的提取任意区域的序列

用法:

samtools faidx input.fa

 

该命令对输入的fasta序列有一定要求:对于每条序列,除了最后一行外, 其他行的长度必须相同,  

>one 
ATGCATGCATGCATGCATGCATGCATGCAT 
GCATGCATGCATGCATGCATGCATGCATGC 
ATGCAT 
>two another chromosome 
ATGCATGCATGCAT 
GCATGCATGCATGC 

最后生成的.fai文件如下, 共5列,\t分隔;

one 66 5 30 31
two 28 98 14 15


第一列 NAME   :   序列的名称,只保留“>”后,第一个空白之前的内容;

第二列 LENGTH:   序列的长度, 单位为bp;

第三列 OFFSET :   第一个碱基的偏移量, 从0开始计数,换行符也统计进行;

第四列 LINEBASES : 除了最后一行外, 其他代表序列的行的碱基数, 单位为bp;

第五列 LINEWIDTH : 行宽, 除了最后一行外, 其他代表序列的行的长度, 包括换行符, 在windows系统中换行符为\r\n, 要在序列长度的基础上加2;

提取序列:

samtools faidx input.fa chr1 > chr1.fa

samtools faidx input.fa chr1:100-200 > chr1.fa

 

以上是关于samtools常用命令详解的主要内容,如果未能解决你的问题,请参考以下文章

samtools和bcftools使用说明

2019-04-28samtools

samtools使用大全

samtools view 使用小结

Linux常用命令详解 find

Linux常用性能诊断命令详解