天天看點

Samtools安裝及常用指令詳解

Samtools是一個用于操作sam和bam檔案的工具合集。包含有許多指令。以下是常用指令的介紹

下載下傳安裝包:

http://www.htslib.org/download/

安裝依賴:

yum install bzip2-devel ncurses-libs ncurses-devel xz-devel zlib-devel      

編譯安裝Samtools

tar xvf samtools-1.9.tar.bz2
cd samtools-1.9
./configure --prefix=/opt/samtools1.9
make
make install      

配置環境變量:

gedit ~/.bashrc
 
#Samtools1.9
export PATH=/opt/samtools1.9/bin:$PATH
 
source ~/.bashrc      

運作

samtools      
Samtools安裝及常用指令詳解

samtools常用指令詳解

1. view

view指令的主要功能是:将sam檔案轉換成bam檔案;然後對bam檔案進行各種操作,比如資料的排序(不屬于本指令的功能)和提取(這些操作是對bam檔案進行的,因而當輸入為sam檔案的時候,不能進行該操作);最後将排序或提取得到的資料輸出為bam或sam(預設的)格式。

bam檔案優點:bam檔案為二進制檔案,占用的磁盤空間比sam文本檔案小;利用bam二進制檔案的運算速度快。

view指令中,對sam檔案頭部的輸入(-t或-T)和輸出(-h)是單獨的一些參數來控制的。

Usage: samtools view [options] <in.bam>|<in.sam> [region1 [...]]
預設情況下不加 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      

例子:

将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 $gt; 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 <maxMem>] <in.bam> <out.prefix>  
-m 參數預設下是 500,000,000 即500M(不支援K,M,G等縮寫)。對于處理大資料時,如果記憶體夠用,則設定大點的值,以節約時間。
-n 設定排序方式按short reads的ID排序。預設下是按序列在fasta檔案中的順序(即header)和序列從左往右的位點排序。      

3.merge

将2個或2個以上的已經sort了的bam檔案融合成一個bam檔案。融合後的檔案不需要則是已經sort過了的。

Usage:   samtools merge [-nr] [-h inh.sam] <out.bam> <in1.bam> <in2.bam>[...]
 
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 <out.bam> [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的比對圖形的時候也需要。

以下兩種指令結果一樣
$ samtools index abc.sort.bam
$ samtools index abc.sort.bam abc.sort.bam.bai      

5. faidx

對fasta檔案建立索引,生成的索引檔案以.fai字尾結尾。該指令也能依據索引檔案快速提取fasta檔案中的某一條(子)序列

Usage: samtools faidx <in.bam> [ [...]]
 
對基因組檔案建立索引
$ samtools faidx genome.fasta
生成了索引檔案genome.fasta.fai,是一個文本檔案,分成了5列。第一列是子序列的名稱;
第二列是子序列的長度;個人認為“第三列是序列所在的位置”,因為該數字從上往下逐漸變大,
最後的數字是genome.fasta檔案的大小;第4和5列不知是啥意思。于是通過此檔案,可以定
位子序列在fasta檔案在磁盤上的存放位置,直接快速調出子序列。
 
由于有索引檔案,可以使用以下指令很快從基因組中提取到fasta格式的子序列
$ samtools faidx genome.fasta scffold_10 > scaffold_10.fasta      

6. tview

tview能直覺的顯示出reads比對基因組的情況,和基因組浏覽器有點類似。

Usage: samtools tview <aln.bam> [ref.fasta]
 
當給出參考基因組的時候,會在第一排顯示參考基因組的序列,否則,第一排全用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等
還有很多其它的使用說明,具體按 ? 鍵來檢視。Usage: samtools tview <aln.bam> [ref.fasta]
 
當給出參考基因組的時候,會在第一排顯示參考基因組的序列,否則,第一排全用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等
還有很多其它的使用說明,具體按 ? 鍵來檢視。      

7. 将bam檔案轉換為fastq檔案

有時候,我們需要提取出比對到一段參考序列的reads,進行小範圍的分析,以利于debug等。這時需要将bam或sam檔案轉換為fastq格式。

8. 使用bcftools

bcftools和samtools類似,用于處理vcf(variant call format)檔案和bcf(binary call format)檔案。前者為文本檔案,後者為其二進制檔案。

bcftools使用簡單,最主要的指令是view指令,其次還有index和cat等指令。index和cat指令和samtools中類似。此處主講使用view指令來進行SNP和Indel calling。該指令的使用方法和例子為:

$ bcftools view [-AbFGNQSucgv] [-D seqDict] [-l listLoci] [-s listSample] 
          [-i gapSNPratio] [-t mutRate] [-p varThres] [-P prior] 
          [-1 nGroup1] [-d minFrac] [-U nPerm] [-X permThres] 
          [-T trioType] in.bcf [region]
 
$ bcftools view -cvNg abc.bcf > snp_indel.vcf      

繼續閱讀