生信黑板报之bioawk

bioawk是李恒开发的基于linux awk的一个扩展工具。用过awk的都知道,它是一款逐行处理文本的古老编程语言,将文本按行读进来,把每一列映射到一个数字类型的变量,方便处理。awk中有不少变量,比如:

$0:指当前整行文本,$1 、$2分别指第一列和第二列

NR:number of record,就是行数,对应到全称方便理解记忆

ORS:output record separator,输出记录的分隔符,比如是以逗号还是制表符(\t)分割

好了,有关awk的更多用法,就说到这里,有兴趣可以看左耳朵耗子的博客。下面继续说bioawk,它的作者相信有所涉猎生物信息的同学已经听过了,如果你不知道的话,那么只需告诉你,他同时还是BWA和SAMtools的作者就行了。

安装

which bison #如果看到bison是安装好了的,跳过下面一步apt-get install bison #如果还没安装bison,这里是以ubuntu为例的安装命令git clonehttps://github.com/lh3/bioawk#从github克隆一份源码安装

使用

我们先上例子,再讲用法

bioawk-cfastx'END {print NR}'test.fastq

>10000#输出reads条数

wc-ltest.fastq

>40000test.fastq#由于fastq格式是4行为一个记录,和上面的结果是一致的。这太简单了,一个`wc`也能搞定呀,干嘛要用bioawk?别着急,后面还有更猛的。

bioawk-cfastx'{print $name, length($seq)}'test-trimmed.fastq#将reads名和长度,分为两列显示,以制表符分割,以下仅显示部分结果

> SOLEXA2_0414:3:1:11146:1065#0/1-contaminated-19 77

> SOLEXA2_0414:3:1:12658:1069#0/1-contaminated-10 85

> SOLEXA2_0414:3:1:17191:1069#0/1-uncontaminated  85

......

#哦,有点意思哈,下面还有,几乎所有习惯用awk做的那些筛选统计,这货都尽量满足你 :-)

bioawk-cfastx'BEGIN {short=0} {if(length($seq) < 70) short +=1} END {print "short seq total:",short}'test-trimmed.fastq#统计长度小于70nt的reads数并输出

> short seq total:406

#这时候你两眼放光,哇,有了它,平常做些简单的统计方便多了,都不用写冗长的awk或者为了统计序列的长度,都要用BioPython。不仅如此,bioawk还支持bed/SAM/vcf/gff/fasta,是不是很爽?

samtools view YSD.sorted.bam | bioawk-csam'{if($mapq < 10) {print $qname,$mapq} }'| les#如果mapping quality< 10,打印read name和mapping质量值

> E00491:44:H3YK7ALXX:1:2216:26179:69555  0

> E00491:44:H3YK7ALXX:1:1201:23297:30422  0

> E00491:44:H3YK7ALXX:1:1107:32512:26027  0

bioawk的帮助很简短

usage: bioawk-F fs-c fmt-f progfile | 'prog'-F: 输入记录列和列之间的分隔符,和awk相同-c: 支持的格式,前面讲过-t: 以制表符分割各列,效果等同于bioawk -F'\t' -v OFS="\t"-f:官方文档没有介绍,这个参数和awk的参数意义一样,从文件读取source命令-H:处理sam文件时,是否包含header

需注意的是,处理BAM文件时,要先用samtools view打开,而后使用管道接上bioawk,不然直接使用bioawk会乱码。

本文同步发布于知乎和公众号JackTalk

你可能感兴趣的:(生信黑板报之bioawk)