題目來(lái)源:http://www.bio-info-trainee.com/3578.html
首先使用bowtie2軟件自帶的測(cè)試數(shù)據(jù)生成sam/bam文件,代碼如下(這里bowtie2是直接使用可執(zhí)行文件,也可以source激活后直接使用):
mkdir -p ~/biosoft
cd ~/biosoft
wget https://sourceforge.net/projects/bowtie-bio/files/bowtie2/2.3.4.3/bowtie2-2.3.4.3-linux-x86_64.zip
unzip bowtie2-2.3.4.3-linux-x86_64.zip
cd ~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads
../../bowtie2 -x ../index/lambda_virus -1 reads_1.fq -2 reads_2.fq > tmp.sam
# samtools view -bS tmp.sam >tmp.bam
命令解釋?zhuān)?a target="_blank">參考生信技能樹(shù)):
bowtie的使用分為兩步,首先建立索引,之后進(jìn)行比對(duì)。
建索引:
基本命令:bowtie2-build your-fastq-file.fa your-index-name
example中的read已經(jīng)建立好了索引,索引位置及前綴為../index/lambda_virus
比對(duì)基本格式 :
單端測(cè)序:Bowtie –x tmp –U(表示單端) reads.fa –S hahahhha.sam
雙端測(cè)序:Bowtie –x tmp -1 reads1.fa -2 reads2.fa –S hahahha.sam
- ../../bowtie2 還沒(méi)有將bowtie2寫(xiě)入環(huán)境變量,因此使用bowtie2需要寫(xiě)明全路徑
- ../index/lambda_virus 表示建立好的索引文件
- -S 后接輸出文件名
總結(jié):將reads1.fa及reads2.fa 兩條序列比對(duì)至索引文件../index/lambda_virus上 比對(duì)后產(chǎn)生tmp.sam文件
- 統(tǒng)計(jì)共多少條reads(pair-end reads這里算一條)參與了比對(duì)參考基因組
less -SN tmp.sam | wc -l
20003
- 統(tǒng)計(jì)共有多少種比對(duì)的類(lèi)型(即第二列數(shù)值有多少種)及其分布。
less -SN tmp.sam | sed '1,3d' | cut -f 2|sort -n | uniq -c
24 65
165 69
153 73
213 77
2 81
4650 83
136 89
4516 99
125 101
16 113
24 129
153 133
165 137
213 141
4516 147
125 153
2 161
4650 163
136 165
16 177
- 篩選出比對(duì)失敗的reads,看看序列特征。
less -SN tmp.sam | grep -v '^@' |cut -f 1-10|grep -v 'M' |cut -f 10 |head
GCGTNGTACNNGNNGATGNTTACGACTAANACTTNNNNNTNCNGNNT
ANTGGNTNAGCGGNCGNAGNGNTCNGNAGCNANNAANCTGNTATGNTNNNTNNATCNNNCNNNNGTGNNAANNNCCAGNNNNGGCNNNNCATACANNNTNNNCNTNNNTACANNATANNCGNNATTNNACNGTNNCGNGNNCCGNGTNNNNN
NNTNNNNNAGNTNAANANANGTNTTGNGAANCTNNANACNNCTTTTNNNNTATGNTNNTNAGCCTAG
TTGNNCNNATATNNTAGATCGATATCTTTATNTCGAGCAAAGCAAA
NNNGANNNTGCTCGNCAANNNNANNNNTTTCCTTNTNCGGNCCNGNAATNATNACANNATGNNGNAANCGNNGNTTNTTNTNCAGGNCCTCTGNNGCNNANGCNCANGNNNTNTNNNNCNTNGNNGNCNNNCCGNAATNNNCTGNNGNCNTNGTNTCTGNCTNNNAGNNGNCGAANCTANNGANCCATANNTN
TTCGGNNCGCNNNNAAANAGGCTGAGCACGGTGTACGTCAGNCCGGAAAAGTGC
NNNGNTGTACCGGCTGTCTGGTATGTATGAGTTTGTGGTGAATAATGCCCCTGAACAGACAGAGGACGCCGGGCCCGCAGAGCCTGTTTCTGCGGGAAAGTGTTCGACGGTGAGCTGAGNTTTGCCCTGAAACTGG
less -SN tmp.sam |grep -v '^@' | cut -f 6 | grep -v 'M' | wc -l
1005
less -SN tmp.sam |grep -v '^@' |awk ' $6 =="*" {print $0}' |wc -l
1005
less -SN tmp.sam |grep -v '^@' |awk '{if ( $6 =="*") print $0}' |wc -l
- 比對(duì)失敗的reads區(qū)分成單端失敗和雙端失敗情況,并且拿到序列ID
less -SN tmp.sam |grep -v "^@" |awk '{if ($6=="*") print}' |cut -f1|sort -n |uniq -c|grep -w 2 #顯示兩端都沒(méi)有比對(duì)上的id, -w參數(shù)表示精確匹配。
less -SN tmp.sam |grep -v "^@" |awk '{if ($6=="*") print}' |cut -f1|sort -n |uniq -c|grep -w 1
- 篩選出比對(duì)質(zhì)量值大于30的情況(看第5列)
less -SN tmp.sam |grep -v "^@" |awk '{if ($5 > 30) print $0}' |cut -f5|sort -n |uniq -c
1056 40
17576 42
sam文件中,第一列為ID,第二列為比對(duì)類(lèi)型,第三列是參考基因組信息,第四列為坐標(biāo),第五列為質(zhì)量值,第6列為比對(duì)信息,第十列為堿基序列
- 篩選出比對(duì)成功,但是并不是完全匹配的序列
cat tmp.sam |grep -v "^@" |cut -f 6,10|grep [IDPSH]|wc -l
M:alignment match (can be a sequence match or mismatch)
表示read可mapping到第三列的序列上,則read的堿基序列與第三列的序列堿基相同,表示正常的mapping結(jié)果,M表示完全匹配,但是無(wú)論reads與序列的正確匹配或是錯(cuò)誤匹配該位置都顯示為M
I:insertion to the reference
表示read的堿基序列相對(duì)于第三列的RNAME序列,有堿基的插入
D:deletion from the reference
表示read的堿基序列相對(duì)于第三列的RNAME序列,有堿基的刪除
N:skipped region from the reference
表示可變剪接位置
P:padding (silent deletion from padded reference)
S:soft clipping (clipped sequences present in SEQ)
H:hard clipping (clipped sequences NOT present in SEQ)
clipped均表示一條read的序列被分開(kāi),之所以被分開(kāi),是因?yàn)閞ead的一部分序列能匹配到第三列的RNAME序列上,而被分開(kāi)的那部分不能匹配到RNAME序列上。
"="表示正確匹配到序列上
"X"表示錯(cuò)誤匹配到序列上
而H只出現(xiàn)在一條read的前端或末端,但不會(huì)出現(xiàn)在中間,S一般會(huì)和H成對(duì)出現(xiàn),當(dāng)有H出現(xiàn)時(shí),一定會(huì)有一個(gè)與之對(duì)應(yīng)的S出現(xiàn)
例如:
162M89S
162H89M
149M102S
149H102M
40S211M
20M1D20M211H
S可以單獨(dú)出現(xiàn),而H必須有與之對(duì)應(yīng)的S出現(xiàn)時(shí)才可能出現(xiàn),不可在相同第一列的情況下單獨(dú)出現(xiàn)
N:如果是mRNA-to-genome,N出現(xiàn)的位置代表內(nèi)含子,其它比對(duì)形式出現(xiàn)N時(shí)則沒(méi)有具體解釋
M/I/S/=/X:這些數(shù)值的加和等于第10列SEQ的長(zhǎng)度
- 篩選出inset size長(zhǎng)度大于1250bp的 pair-end reads
less -SN tmp.sam | grep -v '^@' | awk '{if( $9 > 1250 || $9 < -1250) print $0}' |wc -l
80
less -SN tmp.sam | grep -v '^@' | awk ' $9 > 1250 || $9 < -1250 { print $0}' |wc -l
80
- 統(tǒng)計(jì)參考基因組上面各條染色體的成功比對(duì)reads數(shù)量.
less -SN tmp.sam | grep -v '^@' | cut -f 3 | sort |uniq -c
426 *
19574 gi|9626243|ref|NC_001416.1|
- 篩選出原始fq序列里面有N的比對(duì)情況
less -SN tmp.sam | grep -v '^@' |cut -f 10 | grep 'N' |wc -l
12934
- 篩選出原始fq序列里面有N,但是比對(duì)的時(shí)候卻是完全匹配的情況
less -SN tmp.sam | grep -v '^@' |cut -f 6,10 |grep 'N'|cut -f 1|grep -v [IDNPSH] |grep 'M'|wc -l
10632
less -SN tmp.sam | grep -v '^@' |awk ' $10 ~ "N" {print $0}' | awk '$6 !~ "[IDNPSH]" {print $0}'| awk '$6 !~ "*" {print $0}' |wc -l
10632
less -SN tmp.sam | grep -v '^@' |awk ' $10 ~ "N" {print $0}' | awk '$6 !~ "[IDNPSH]" {print $0}'| awk '$6 != "*" {print $0}' |wc -l
10632
less -SN tmp.sam | grep -v '^@' | awk '{if ($10 ~ "N") print $0}' | awk '{ if ($6 !~ "[IDNPSH]") print $0} '| awk '{if ($6 != "*") print $0}' | wc -l
10632
less -SN tmp.sam | grep -v '^@' | awk '{if ($10 ~ "N") print $0}' | awk '{ if ($6 !~ "[IDNPSH]") print $0} '| awk '{if ($6 != "\*") print $0}' | wc -l
awk: cmd. line:1: warning: escape sequence `\*' treated as plain `*' # awk命令提示"*"字符不需要轉(zhuǎn)義符
10632
less -SN tmp.sam | grep -v '^@' | awk '$10 ~ "N" && $6 !~ "[IDNPSH]" && $6 != "*" {print $0}'|wc -l
10632
less -SN tmp.sam | grep -v '^@'| awk '{if ($10 ~ "N" && $6 !~ "[IDNPSH]" && $6 != "*") print $0}' |wc -l
10632
- sam文件里面的頭文件行數(shù)
less -SN tmp.sam | grep '^@' |wc -l
3
- sam文件里每一行的tags個(gè)數(shù)一樣嗎
less -SN tmp.sam | grep -v '^@' |cut -f 12- | less -SN
- sam文件里每一行的tags個(gè)數(shù)分別是多少個(gè)
less -SN tmp.sam | grep -v '^@' |cut -f 12| wc -l
20000
less -SN tmp.sam | grep -v '^@' |cut -f 20| wc -l
20000 #第12列和行數(shù)與第20列一致,說(shuō)明每一行的tags數(shù)量相同,均為9個(gè)
- sam文件里記錄的參考基因組染色體長(zhǎng)度分別是?
less -SN tmp.sam |grep '^@' |grep 'LN'
@SQ SN:gi|9626243|ref|NC_001416.1| LN:48502
- 找到比對(duì)情況有insertion情況的
less -SN tmp.sam | grep -v '^@' | awk ' $6 ~ "I" {print $0}' | wc -l
66
- 找到比對(duì)情況有deletion情況的
less -SN tmp.sam | grep -v '^@' | awk ' $6 ~ "I" {print $0}' | wc -l
1843
- 取出位于參考基因組某區(qū)域的比對(duì)記錄,比如 5013到50130 區(qū)域
less -SN tmp.sam| grep -v '^@' | awk '$4 > 5013 && $4 < 50130 && $8 > 5013 && \
$8 < 50130 && $6 != "*" { print $0}' |wc -l
17072
- 把sam文件按照染色體以及起始坐標(biāo)排序
less -SN tmp.sam| grep -v '^@' | sort -k 4 -n | awk '$4 != 0 {print $0}'|wc -l
19574
less -SN tmp.sam| grep -v '^@' | sort -t ' ' -k 4 -n | awk '$4 != 0 {print $0}'|wc -l
19574
- 找到 102M3D11M 的比對(duì)情況,計(jì)算其reads片段長(zhǎng)度
less -SN tmp.sam| grep -v '^@' | grep -w '102M3D11M'| awk '{print length($10)}'
113
- 安裝samtools軟件后使用samtools軟件的各個(gè)功能?chē)L試把上述題目重新做一遍。
其它概念題
高通量測(cè)序數(shù)據(jù)分析中,序列與參考序列的比對(duì)后得到的標(biāo)準(zhǔn)文件為什么文件?
sam文件是一種比對(duì)后的文件,能直接查看嗎?
Sam/Bam文件分為兩部分,一部分以@開(kāi)頭的是什么序列,另一部分是什么序列?
Sam文件除頭文件,以什么符號(hào)分割文本的,比對(duì)部分信息一行是多少列?你能用awk計(jì)算列數(shù)嗎?
Sam/Bam文件的@SQ開(kāi)頭的行是什么?你能生成一個(gè)文本,兩列,一列是參考基因組染色體/sca id,一列是長(zhǎng)度嗎?
Sam文件的比對(duì)位置是從1還是0開(kāi)始的?
常見(jiàn)CIGAR 字符串各字母代表的意義
比對(duì)質(zhì)量的數(shù)字是哪一列?越大比對(duì)質(zhì)量越好還是越小越好?
Sam文件的flag是第幾列,數(shù)字代表什么意義?是怎么計(jì)算來(lái)的?
Sam文件怎么轉(zhuǎn)bam文件?用什么指令?為什么要轉(zhuǎn)換?
Bam文件查看用什么指令?如果需要查看頭文件需要增加參數(shù)?
Bam文件為什么要排序?排序后的bam和未排序的bam頭文件和chr position列有什么區(qū)別?
Bam文件建索引的指令是什么?
Bam文件可視化用什么工具?查看時(shí)需要建立索引嗎?
Bam文件統(tǒng)計(jì)reads比對(duì)情況用samtools的哪一個(gè)子命令?
SE測(cè)序和PE測(cè)序的所比對(duì)后得到的sam文件的區(qū)別在哪里?
Bam能用gzip再壓縮嗎?
Sam文件通常由哪些比對(duì)軟件得到的
Sam/Bam文件能轉(zhuǎn)成fastq文件嗎?
有時(shí)候不能通過(guò)文件名的后綴來(lái)區(qū)別是sam還是bam,你是怎么區(qū)別的?