sam和bam文件处理

samtools是一个用于操作sam和bam文件的工具合集。包含有许多命令。以下是常用命令的介绍:
sambamba是一个比samtools更强大的操作sam和bam的工具,绝大部分samtools能用的功能sambamba都能用,而且速度和资源占用上都有很大的优化,所以后期用samtools的时候都可以替换成sambamba。

1. view

view命令的主要功能是:将sam文件转换成bam文件;然后对bam文件进行各种操作,比如数据的排序(不属于本命令的功能)和提取(这些操作 是对bam文件进行的,因而当输入为sam文件的时候,不能进行该操作);最后将排序或提取得到的数据输出为bam或sam(默认的)格式。

bam文件优点:bam文件为二进制文件,占用的磁盘空间比sam文本文件小;利用bam二进制文件的运算速度快。

将sam文件转换成bam文件

$ samtools view -bS abc.sam > abc.bam
$ samtools view -b -S abc.sam -o abc.bam

提取比对到参考序列上的比对结果

$ 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

2. sort

sort对bam文件进行排序。
Usage: samtools sort [-n] [-m ]

-m 参数默认下是 500,000,000 即500M(不支持K,M,G等缩写)。对于处理大数据时,如果内存够用,则设置大点的值,以节约时间。
-n 设定排序方式按short reads的ID排序。默认下是按序列在fasta文件中的顺序(即header)和序列从左往右的位点排序。
例子:

$ samtools sort abc.bam abc.sort
$ samtools view abc.sort.bam | less -S

3.merge

将2个或2个以上的已经sort了的bam文件融合成一个bam文件。融合后的文件不需要则是已经sort过了的。

Usage:   samtools merge [-nr] [-h inh.sam] [...]

Options: -n       sort by read names

         -r       attach RG tag (inferred from file names)

         -u       uncompressed BAM output

         -f       overwrite the output BAM if exist

         -1       compress level 1

         -R STR   merge file in the specified region STR [all]

         -h FILE  copy the header in FILE to [in1.bam]

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.

4.index

必须对bam文件进行默认情况下的排序后,才能进行index。否则会报错。

建立索引后将产生后缀为.bai的文件,用于快速的随机处理。很多情况下需要有bai文件的存在,特别是显示序列比对情况下。比如samtool的tview命令就需要;gbrowse2显示reads的比对图形的时候也需要。

Usage: samtools index [out.index]

例子:
以下两种命令结果一样

$ samtools index abc.sort.bam

$ samtools index abc.sort.bam abc.sort.bam.bai

5. faidx

对fasta文件建立索引,生成的索引文件以.fai后缀结尾。该命令也能依据索引文件快速提取fasta文件中的某一条(子)序列

Usage: samtools faidx [ [...]]

对基因组文件建立索引

$ samtools faidx genome.fasta

生成了索引文件genome.fasta.fai,是一个文本文件,分成了5列。第一列是子序列的名称;

第二列是子序列的长度;个人认为“第三列是序列所在的位置”,因为该数字从上往下逐渐变大,最后的数字是genome.fasta文件的大小;第4和5列不知是啥意思。于是通过此文件,可以定位子序列在fasta文件在磁盘上的存放位置,直接快速调出子序列。由于有索引文件,可以使用以下命令很快从基因组中提取到fasta格式的子序列

$ samtools faidx genome.fasta scffold_10 > scaffold_10.fasta

6. cat

合并多个bam文件,samtools cat 能实现对很多bam文件合并起来的操作,跟merge的差别是该合并之后的bam需要sort,且是merge的备选方案,merge命令对太多bam文件不适用。

$ samtools cat -o xx.bam  /xx/*bam
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 参考文章:https://www.cnblogs.com/xiaofeiIDO/p/6805373.html1、v...
    dming1024阅读 5,562评论 0 15
  • --------------- Nickier 2018-12-21 --------------- samtoo...
    Nickier阅读 106,371评论 10 128
  • 1. view view命令的主要功能是:将sam文件转换成bam文件;然后对bam文件进行各种操作,比如数据的排...
    felixhell阅读 644评论 0 3
  • 【日更挑战赛】-当抒发写作这件事情,变成一种日更比赛的时候。我真是无比讨厌自己敲击出的文字。就连敲击的声音都变成了...
    百事试验田阅读 146评论 0 0
  • 阳光在林间游动微风奏响叶子蜻蜓,练习着悬停小童在教训不太听话的足球 我趴在地上让眼睛和浅草一般高我——发现生命在燎原
    俗然阅读 496评论 6 23