2019-11-09 BAM和SAM格式文件shell练习

题目来源:http://www.bio-info-trainee.com/3578.html
首先使用bowtie2软件自带的测试数据生成sam/bam文件,代码如下(这里bowtie2是直接使用可执行文件,也可以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

命令解释(参考生信技能树):
bowtie的使用分为两步,首先建立索引,之后进行比对。
建索引:
基本命令:bowtie2-build your-fastq-file.fa your-index-name
example中的read已经建立好了索引,索引位置及前缀为../index/lambda_virus
比对基本格式 :
单端测序:Bowtie –x tmp –U(表示单端) reads.fa –S hahahhha.sam
双端测序:Bowtie –x tmp -1 reads1.fa -2 reads2.fa –S hahahha.sam

  • ../../bowtie2 还没有将bowtie2写入环境变量,因此使用bowtie2需要写明全路径
  • ../index/lambda_virus 表示建立好的索引文件
  • -S 后接输出文件名
    总结:将reads1.fa及reads2.fa 两条序列比对至索引文件../index/lambda_virus上 比对后产生tmp.sam文件
  1. 统计共多少条reads(pair-end reads这里算一条)参与了比对参考基因组
less -SN tmp.sam | wc -l
20003
  1. 统计共有多少种比对的类型(即第二列数值有多少种)及其分布。
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
  1. 筛选出比对失败的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
  1. 比对失败的reads区分成单端失败和双端失败情况,并且拿到序列ID
less -SN tmp.sam |grep -v "^@" |awk '{if ($6=="*") print}' |cut -f1|sort -n |uniq -c|grep -w 2 #显示两端都没有比对上的id, -w参数表示精确匹配。
less -SN tmp.sam |grep -v "^@" |awk '{if ($6=="*") print}' |cut -f1|sort -n |uniq -c|grep -w 1
  1. 筛选出比对质量值大于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,第二列为比对类型,第三列是参考基因组信息,第四列为坐标,第五列为质量值,第6列为比对信息,第十列为碱基序列

  1. 筛选出比对成功,但是并不是完全匹配的序列
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结果,M表示完全匹配,但是无论reads与序列的正确匹配或是错误匹配该位置都显示为M

I:insertion to the reference

表示read的碱基序列相对于第三列的RNAME序列,有碱基的插入

D:deletion from the reference

表示read的碱基序列相对于第三列的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的序列被分开,之所以被分开,是因为read的一部分序列能匹配到第三列的RNAME序列上,而被分开的那部分不能匹配到RNAME序列上。

"="表示正确匹配到序列上

"X"表示错误匹配到序列上

而H只出现在一条read的前端或末端,但不会出现在中间,S一般会和H成对出现,当有H出现时,一定会有一个与之对应的S出现

例如:

162M89S

162H89M

149M102S

149H102M

40S211M

20M1D20M211H

S可以单独出现,而H必须有与之对应的S出现时才可能出现,不可在相同第一列的情况下单独出现

N:如果是mRNA-to-genome,N出现的位置代表内含子,其它比对形式出现N时则没有具体解释

M/I/S/=/X:这些数值的加和等于第10列SEQ的长度

  1. 筛选出inset size长度大于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
  1. 统计参考基因组上面各条染色体的成功比对reads数量.

less -SN tmp.sam | grep -v '^@' | cut -f 3 | sort |uniq -c
      426 *
  19574 gi|9626243|ref|NC_001416.1|
  1. 筛选出原始fq序列里面有N的比对情况
less -SN tmp.sam | grep -v '^@' |cut  -f  10 | grep 'N' |wc -l
12934

  1. 筛选出原始fq序列里面有N,但是比对的时候却是完全匹配的情况
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命令提示"*"字符不需要转义符
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
  1. sam文件里面的头文件行数
less -SN tmp.sam | grep  '^@' |wc -l
3
  1. sam文件里每一行的tags个数一样吗
less -SN tmp.sam | grep -v '^@' |cut -f 12- | less -SN
  1. sam文件里每一行的tags个数分别是多少个
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列和行数与第20列一致,说明每一行的tags数量相同,均为9个
  1. sam文件里记录的参考基因组染色体长度分别是?
less -SN tmp.sam |grep '^@' |grep 'LN'
@SQ SN:gi|9626243|ref|NC_001416.1|  LN:48502
  1. 找到比对情况有insertion情况的
less -SN tmp.sam | grep -v '^@' | awk ' $6 ~ "I"  {print $0}' | wc -l
66
  1. 找到比对情况有deletion情况的
less -SN tmp.sam | grep -v '^@' | awk ' $6 ~ "I"  {print $0}' | wc -l
1843
  1. 取出位于参考基因组某区域的比对记录,比如 5013到50130 区域
less -SN tmp.sam| grep -v '^@' | awk '$4 > 5013 && $4 < 50130 && $8 > 5013 && \
  $8 < 50130 && $6 != "*" { print $0}' |wc -l
17072
  1. 把sam文件按照染色体以及起始坐标排序
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
  1. 找到 102M3D11M 的比对情况,计算其reads片段长度
less -SN tmp.sam| grep -v '^@' | grep -w  '102M3D11M'| awk '{print length($10)}'
113
  1. 安装samtools软件后使用samtools软件的各个功能尝试把上述题目重新做一遍。
    其它概念题
    高通量测序数据分析中,序列与参考序列的比对后得到的标准文件为什么文件?
    sam文件是一种比对后的文件,能直接查看吗?
    Sam/Bam文件分为两部分,一部分以@开头的是什么序列,另一部分是什么序列?
    Sam文件除头文件,以什么符号分割文本的,比对部分信息一行是多少列?你能用awk计算列数吗?
    Sam/Bam文件的@SQ开头的行是什么?你能生成一个文本,两列,一列是参考基因组染色体/sca id,一列是长度吗?
    Sam文件的比对位置是从1还是0开始的?
    常见CIGAR 字符串各字母代表的意义
    比对质量的数字是哪一列?越大比对质量越好还是越小越好?
    Sam文件的flag是第几列,数字代表什么意义?是怎么计算来的?
    Sam文件怎么转bam文件?用什么指令?为什么要转换?
    Bam文件查看用什么指令?如果需要查看头文件需要增加参数?
    Bam文件为什么要排序?排序后的bam和未排序的bam头文件和chr position列有什么区别?
    Bam文件建索引的指令是什么?
    Bam文件可视化用什么工具?查看时需要建立索引吗?
    Bam文件统计reads比对情况用samtools的哪一个子命令?
    SE测序和PE测序的所比对后得到的sam文件的区别在哪里?
    Bam能用gzip再压缩吗?
    Sam文件通常由哪些比对软件得到的
    Sam/Bam文件能转成fastq文件吗?
    有时候不能通过文件名的后缀来区别是sam还是bam,你是怎么区别的?
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345