[轉]samtools使用大全(2018-05-29)

轉自:https://blog.csdn.net/sinat_38163598/article/details/72910115

samtools是一個用于操作sam和bam文件(通常是短序列比對工具 bwa,bowtie2,hisat2,tophat2等等產生的,具體格式可以在消息框輸入“SAM”查看)的工具合集,包含有許多命令。以下是常用命令的介紹。

1.View

view命令的主要功能是:將sam文件與bam文件互換;然后對bam文件進行各種操作,比如數據的排序(sort)和提取(這些操作

是對bam文件進行的,因而當輸入為sam文件的時候,不能進行該操作);最后將排序或提取得到的數據輸出為bam或sam(默認的)格式。

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

view命令中,對sam文件頭部(序列ID)的輸入(-t或-T)和輸出(-h)是單獨的一些參數來控制的。

Usage: samtools view [options] | [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.

??過濾功統計功能

?-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]

?-F?INT???filtering?flag,?0?for?unset?[0]?

??Skip?alignments?with?bits?present?in?INT?[0]

??數字4代表該序列沒有比對到參考序列上

??數字8代表該序列的mate序列沒有比對到參考序列上

??過濾功能。如F12過濾只有雙端map的

?-q?INT???minimum?mapping?quality?[0]

????比對的最低質量值,一般認為20就為unique比對了,可以結合上述-bF參數使用使用提取特定的比對結果

例子:

將sam文件轉換成bam文件

samtools view -bS abc.sam > abc.bam

BAM轉換為SAM

samtools view -h -o out.sam out.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文件進行排序。一些軟件需要sort的bam或者sam文件,如stringtie,所以必須要sort使用;求depth時,也必須要sort;

Usage: samtools sort [-n] [-m ] ?

-m 內存參數默認下是 500,000,000 即500M(不支持K,M,G等縮寫)。對于處理大數據時,如果內存夠用,則設置大點的值,以節約時間。

-n 設定排序方式按short reads的ID排序。默認下是按序列在fasta文件中的順序(即header)和序列從左往右的位點排序。

例子:

samtools sort accept.bam accept.sort最終產生accept.sort.bam

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]

例子:

4.index

必須對bam文件進行默認情況下的排序后,才能進行index。否則會報錯。

建立索引后將產生后綴為.bai的文件,用于快速的隨機處理。很多情況下需要有bai文件的存在,特別是顯示序列比對情況下。比如samtool的tview命令就需要;gbrowse2顯示reads的比對圖形的時候也需要。IGV顯示比對情況也需要。

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

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

$ samtools faidx genome.fasta scffold_10 > scaffold_10.fasta

6.tview

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

需要事先利用利用上面講的sort和建index命令執行完后,用下述命令。

Usage: samtools tview [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.flagstat

給出BAM文件的比對結果

Usage: samtools flagstat

$ samtools flagstat example.bam

11945742 + 0 in total (QC-passed reads + QC-failed reads)

#總共的reads數

0 + 0 duplicates

7536364 + 0 mapped (63.09%:-nan%)

#總體上reads的匹配率

11945742 + 0 paired in sequencing

#有多少reads是屬于paired reads

5972871 + 0 read1

#reads1中的reads數

5972871 + 0 read2

#reads2中的reads數

6412042 + 0 properly paired (53.68%:-nan%)

#完美匹配的reads數:比對到同一條參考序列,并且兩條reads之間的距離符合設置的閾值

6899708 + 0 with itself and mate mapped

#paired reads中兩條都比對到參考序列上的reads數

636656 + 0 singletons (5.33%:-nan%)

#單獨一條匹配到參考序列上的reads數,和上一個相加,則是總的匹配上的reads數。

469868 + 0 with mate mapped to a different chr

#paired reads中兩條分別比對到兩條不同的參考序列的reads數

243047 + 0 with mate mapped to a different chr (mapQ>=5)

#同上一個,只是其中比對質量>=5的reads的數量

8.depth

得到每個堿基位點的測序深度,并輸出到標準輸出,所以要用大于號追加到一個文件。

Usage: bam2depth [-r reg] [-q baseQthres] [-Q mapQthres] [-b in.bed] [...]

-r 后面跟染色體號(region)

-q :計算深度時要求測序堿基質量最低質量值

-Q:計算深度時要求比對的最低質量值

注意:做depth之前必須做samtools index;

例子

samtools depth accept.bam >depth

9.其他命令

reheader:替換bam文件的頭

$ samtools reheader

idxstats :統計一個表格,4列,分別為”序列名,序列長度,比對上的reads數,unmapped reads

number。第4列應該是paired

reads中有一端能匹配到該scaffold上,而另外一端不匹配到任何scaffolds上的reads數。

$ samtools idxstats

rmdup:將由PCR duplicates獲得的reads去掉,并只保留最高比對質量的read。

Usage: ?samtools rmdup [-sS]

-s 對single-end reads。默認情況下,只對paired-end reads-S 將Paired-end reads作為single-end reads處理。

10. 將bam文件轉換為fastq文件

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

該網站提供了一個bam轉換為fastq的程序:http://www.hudsonalpha.org/gsl/information/software/bam2fastq

$ wget http://www.hudsonalpha.org/gsl/static/software/bam2fastq-1.1.0.tgz$ tar zxf bam2fastq-1.1.0.tgz$ cd bam2fastq-1.1.0$ make$ ./bam2fastq

11. mpileup

samtools還有個非常重要的命令mpileup,以前為pileup。該命令用于生成bcf文件,再使用bcftools進行SNP和Indel的分析。bcftools是samtool中附帶的軟件,在samtools的安裝文件夾中可以找到。

最常用的參數有2:

?-f 來輸入有索引文件的fasta參考序列; -g 輸出到bcf格式。用法和最簡單的例子如下

Usage: samtools mpileup [-EBug] [-CcapQcoef] [-rreg] [-fin.fa] [-llist] [-McapMapQ] [-QminBaseQ] [-qminMapQ]in.bam[in2.bam[...]]$ samtools mpileup -f genome.fasta abc.bam > abc.txt

$ samtools mpileup -gSDf genome.fasta abc.bam > abc.bcf

$ samtools mpileup -guSDf genome.fasta abc.bam | \

? ? ? ? ? bcftools view -cvNg - > abc.vcf

mpileup不使用-u或-g參數時,則不生成二進制的bcf文件,而生成一個文本文件(輸出到標準輸出)。該文本文件統計了參考序列中每個堿基位點的比對情況;該文件每一行代表了參考序列中某一個堿基位點的比對結果。比如:

scaffold_1????? 2841??? A?????? 11????? ,,,...,....???? BHIGDGIJ?FF

scaffold_1????? 2842??? C?????? 12????? ,$,,...,....^I. CFGEGEGGCFF+

scaffold_1????? 2843??? G?????? 11????? ,,...,.....???? FDDDDCD?DD+

scaffold_1????? 2844??? G?????? 11????? ,,...,.....???? FA?AAAA

scaffold_1????? 2845??? G?????? 11????? ,,...,.....???? F656666166*

scaffold_1????? 2846??? A?????? 11????? ,,...,.....???? (1.1111)11*

scaffold_1????? 2847??? A?????? 11????? ,,+9acggtgaag.+9ACGGTGAAT.+9ACGGTGAAG.+9ACGGTGAAG,+9acggtgaag.+9ACGGTGAAG.+9ACGGTGAAG.+9ACGGTGAAG.+9ACGGTGAAG.+9ACGGTGAAG?????? %.+....-..)

scaffold_1????? 2848??? N?????? 11????? agGGGgGGGGG???? !!$!!!!!!!!

scaffold_1????? 2849??? A?????? 11????? c$,...,.....??? !0000000000

scaffold_1????? 2850??? A?????? 10????? ,...,.....????? 353333333

mpileup生成的結果包含6行:參考序列名;位置;參考堿基;比對上的reads數;比對情況;比對上的堿基的質量。其中第5列比較復雜,解釋如下:

1 ‘.’代表與參考序列正鏈匹配。

2 ‘,’代表與參考序列負鏈匹配。

3 ‘ATCGN’代表在正鏈上的不匹配。

4 ‘atcgn’代表在負鏈上的不匹配。

5 ‘*’代表模糊堿基

6 ‘^’代表匹配的堿基是一個read的開始;’^'后面緊跟的ascii碼減去33代表比對質量;這兩個符號修飾的是后面的堿基,其后緊跟的堿基(.,ATCGatcgNn)代表該read的第一個堿基。

7 ‘$’代表一個read的結束,該符號修飾的是其前面的堿基。

8 正則式’\+[0-9]+[ACGTNacgtn]+’代表在該位點后插入的堿基;比如上例中在scaffold_1的2847后插入了9個長度的堿基acggtgaag。表明此處極可能是indel。

9 正則式’-[0-9]+[ACGTNacgtn]+’代表在該位點后缺失的堿基;

12. 使用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] [-DseqDict] [-llistLoci] [-slistSample] ? ? ? ? ? [-igapSNPratio] [-tmutRate] [-pvarThres] [-Pprior] ? ? ? ? ? [-1nGroup1] [-dminFrac] [-UnPerm] [-XpermThres] ? ? ? ? ? [-TtrioType]in.bcf[region]

$ bcftools view -cvNg abc.bcf > snp_indel.vcf

生成的結果文件為vcf格式,有10列,分別是:1 參考序列名;2 varianti所在的left-most位置;3 variant的ID(默認未設置,用’.'表示);4 參考序列的allele;5 variant的allele(有多個alleles,則用’,'分隔);6 variant/reference QUALity;7 FILTers applied;8 variant的信息,使用分號隔開;9 FORMAT of the genotype fields, separated by colon (optional); 10 SAMPLE genotypes and per-sample information (optional)。

例如:

scaffold_1? ? ? 2847? ? .? ? ? A? ? ? AACGGTGAAG? ? ? 194? ? .? ? ? INDEL;DP=11;VDB=0.0401;AF1=1;AC1=2;DP4=0,0,8,3;MQ=35;FQ=-67.5? GT:PL:GQ? ? ? ? 1/1:235,33,0:63

scaffold_1? ? ? 3908? ? .? ? ? G? ? ? A? ? ? 111? ? .? ? ? DP=13;VDB=0.0085;AF1=1;AC1=2;DP4=0,0,5,7;MQ=42;FQ=-63? GT:PL:GQ? ? ? ? 1/1:144,36,0:69

scaffold_1? ? ? 4500? ? .? ? ? A? ? ? G? ? ? 31.5? ? .? ? ? DP=8;VDB=0.0034;AF1=1;AC1=2;DP4=0,0,1,3;MQ=42;FQ=-39? ? GT:PL:GQ? ? ? ? 1/1:64,12,0:21

scaffold_1? ? ? 4581? ? .? ? ? TGGNGG? TGG? ? 145? ? .? ? ? INDEL;DP=8;VDB=0.0308;AF1=1;AC1=2;DP4=0,0,0,8;MQ=42;FQ=-58.5? ? GT:PL:GQ? ? ? ? 1/1:186,24,0:45

scaffold_1? ? ? 4644? ? .? ? ? G? ? ? A? ? ? 195? ? .? ? ? DP=21;VDB=0.0198;AF1=1;AC1=2;DP4=0,0,10,10;MQ=42;FQ=-87 GT:PL:GQ? ? ? ? 1/1:228,60,0:99

scaffold_1? ? ? 4827? ? .? ? ? NACAAAGA? ? ? ? NA? ? ? 4.42? ? .? ? ? INDEL;DP=1;AF1=1;AC1=2;DP4=0,0,1,0;MQ=40;FQ=-37.5? ? ? GT:PL:GQ? ? ? ? 0/1:40,3,0:3

scaffold_1? ? ? 4854? ? .? ? ? A? ? ? G? ? ? 48? ? ? .? ? ? DP=6;VDB=0.0085;AF1=1;AC1=2;DP4=0,0,2,1;MQ=41;FQ=-36? ? GT:PL:GQ? ? ? ? 1/1:80,9,0:16

scaffold_1? ? ? 5120? ? .? ? ? A? ? ? G? ? ? 85? ? ? .? ? ? DP=8;VDB=0.0355;AF1=1;AC1=2;DP4=0,0,5,3;MQ=42;FQ=-51? ? GT:PL:GQ? ? ? ? 1/1:118,24,0:45

第8列中顯示了對variants的信息描述,比較重要,其中的 Tag 的描述如下:

Tag Format Description

AF1 double Max-likelihood estimate of the site allele frequency (AF) of the first ALT allele

DP int Raw read depth (without quality filtering)

DP4 int[4] # high-quality reference forward bases, ref reverse, alternate for and alt rev bases

FQ int Consensus quality. Positive: sample genotypes different; negative: otherwise

MQ int Root-Mean-Square mapping quality of covering reads

PC2 int[2] Phred probability of AF in group1 samples being larger (,smaller) than in group2

PCHI2 double Posterior weighted chi^2 P-value between group1 and group2 samples

PV4 double[4] P-value for strand bias, baseQ bias, mapQ bias and tail distance bias

QCHI2 int Phred-scaled PCHI2

RP int # permutations yielding a smaller PCHI2

CLR int Phred log ratio of genotype likelihoods with and without the trio/pair constraint

UGT string Most probable genotype configuration without the trio constraint

CGT string Most probable configuration with the trio constraint

使用bcftools得到variant calling結果后。需要對結果再次進行過濾。主要依據比對結果中第8列信息。其中的 DP4

一行尤為重要,提供了4個數據:1 比對結果和正鏈一致的reads數、2 比對結果和負鏈一致的reads數、3

比對結果在正鏈的variant上的reads數、4 比對結果在負鏈的variant上的reads數??梢栽O定 (value3 +

value4)大于某一閾值,才算是variant。比如:

$ perl -ne 'print $_ if /DP4=(\d+),(\d+),(\d+),(\d+)/ && ($3+$4)>=10 && ($3+$4)/($1+$2+$3+$4)>=0.8' snp_indel.vcf > snp_indel.final.vcf

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,570評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,505評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,786評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,219評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,438評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,971評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,796評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,995評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,230評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,697評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容