生信小工具:awk的升级版bioawk


在处理大批量的常见的fastq,fasta数据时,我们常常会使用一些自己写的一些python或者perl的script,但是这类型的script,常常会受限于其速度。此时,就很有必要和大家一起学习一下Heng
Li大神写的bioawk(基于底层处理字符串,速度极快)来提升我们处理数据的效率。

什么是bioawk?

BioAwk是Heng Li的得意之作之一。其创作的背景是在经历一系列的网上讨论之后,人们抱怨没有生物信息学专门使用的'awk',他决定采用awk的来源并修改它,以添加以下功能:

  1. 将FASTA / FASTQ文件看作单行来处理
  2. 为已知数据格式添加了新的内部变量。
  3. 添加了许多与生物信息学相关的功能,例如revcomp,以产生反向互补序列。

bioawk的安装

方法一
通过git下载,然后使用make来编译。

git clone git://github.com/lh3/bioawk.git && cd bioawk && make && mv awk bioawk

方法二
使用bioconda无脑安装

conda install bioawk

简单查看一下其帮助文档:

bioawk -c help
#屏幕会打印出
bed:
    1:chrom 2:start 3:end 4:name 5:score 6:strand 7:thickstart 8:thickend 9:rgb 10:blockcount 11:blocksizes 12:blockstarts 
sam:
    1:qname 2:flag 3:rname 4:pos 5:mapq 6:cigar 7:rnext 8:pnext 9:tlen 10:seq 11:qual 
vcf:
    1:chrom 2:pos 3:id 4:ref 5:alt 6:qual 7:filter 8:info 
gff:
    1:seqname 2:source 3:feature 4:start 5:end 6:score 7:filter 8:strand 9:group 10:attribute 
fastx:
    1:name 2:seq 3:qual 4:comment

简单看看它支持的option:

  • -t将输入输出的分隔符设置为tab
  • -c 设置输入文件或想解析的文件的格式
  • -v 设置自定义的变量
  • -H 保留输出结果的header(例如sam file)
  • 然后所有awk的option都可以在bioawk中使用

其实bioawk的本质就是awk,所以其不同之处知识把awk的NR(对应行数)换成不同格式对应的变量。如果你不明白这句话是啥意思,下面给你个example你就懂了。

###使用bioawk读取fastq格式的文件,然后把$name变量对应的行输出(其实就是把fastq文件中每条read的ID给输出)
cat SRR1972739_1.fastq | bioawk -c fastx ' { print $name } ' | head

###输出结果如下
SRR1972739.1
SRR1972739.2
SRR1972739.3
...

具体应用实例

下面会通过一波具体的实例用法来向大家展示其强大之处。

处理FASTA文件

一旦读取输入文件,FASTA的序列的标头将会存储为$name变量,序列将会是$seq变量。

截取每一段序列的长度:

bioawk -c fastx '{ print $name, length($seq) }' input.fasta

测量fasta序列文件中gc含量:

bioawk -c fastx '{ print $name, gc($seq) }' input.fasta

获取所有序列的反向互补链序列:

bioawk -c fastx '{ print ">"$name;print revcomp($seq) }' input.fasta

在一个包含有多序列的fasta文件中,提取出长度大于100bp的序列(这个功能我用最多):

bioawk -c fastx 'length($seq) > 100{ print ">"$name; print $seq }'  input.fasta

修改序列ID,增加前缀或者后缀:

bioawk -c fastx '{ print ">PREFIX"$name; $seq }' input.fasta
bioawk -c fastx '{ print ">"$name"|SUFFIX"; $seq }' input.fasta

基于另一个含有fasta id的文件,提取其所对应的序列(这个也很常用):

#for large scale use cdbyank instead
bioawk -cfastx 'BEGIN{while((getline k <"IDs.txt")>0)i[k]=1}{if(i[$name])print ">"$name"\n"$seq}' input.fasta

处理fastq文件

处理fastq文件是 bioawk输入依然是-c fastx,它会自动识别你是fastq还是fasta格式,然后找出其对应的$name $seq $qual $comment变量,很好很强大,有没有。

计算fastq序列的行数:

bioawk -t -c fastx 'END {print NR}' input.fastq
#当bioawk探测出来你这是fastq文件后,它会将总行数算出来然后除去4,找到相应的序列行数。

将fastq格式转为fasta格式:

bioawk -c fastx '{print ">"$name; print $seq}' input.fastq

计算fastq中碱基的平均质量分数:

bioawk -c fastx '{print ">"$name; print meanqual($qual)}' input.fastq

过滤掉短于10bp的reads(快速简单过滤fastq文件的好办法):

bioawk -cfastx 'length($seq) > 10 {print "@"$name"\n"$seq"\n+\n"$qual}' input.fastq

处理BED file

计算bed file中,所对应feature的长度,例如基因的长度:

bioawk -c bed '{ print $end - $start }' test.bed

处理SAM file

提取出比对不上的reads.

bioawk -c sam 'and($flag,4)' input.sam

提取比对得上的reads:

bioawk -c sam -H '!and($flag,4)' input.sam

基于sam file,创建fasta文件:

bioawk -c sam '{ s=$seq; if(and($flag, 16)) {s=revcomp($seq) } print ">"$qname"\n"s}' input.sam > output.fasta

处理VCF文件

输出你想要那组samples(这里是foo和bar)所对应的基因型:

grep -v "^##" in.vcf | bioawk -tc hdr '{print $foo,$bar}'

大概介绍就这么多,大家可以看到只要你熟悉awk还有bioawk,然后将其玩得6,就犹如懂得十八般武艺般,精通处理常见的生物信息文件。另外当我们处理BAM file时,一般需要使用samtools view将其读取先,再使用bioawk进一步处理,因为bam file是其他进制的存储格式,不能直接处理。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容