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常用指令詳解
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