虽然现在操作几种常用格式的专用工具都有了,比如bedtools、samtools、vcftools、bcftools等,但bioawk的优势就是方便快捷。
大神Heng Li将常用几种格式(bed、sam、vcf、gff和fastx)的文件按照字段属性映射到awk的变量,我们只需要指明待操作文件的格式,输入变量名就能提取想要的信息,并能结合内置函数灵活应用,bioawk能操作的文件格式如下表所示:
bioawk 安装,conda一行命令搞定,或者上github上下载源文件编译:
conda install -c bioconda bioawk
可能会用到的几个参数:
-t 设置input和output文件的分隔符为Tab
-c fmt 指定输入文件的格式
-v var=value 初始化一个变量,可以从shell导入并可以指定多次,和awk一样
-H 在output文件中保留header,比如sam文件的header。
可能会用到的的几个函数:
- gc($seq): 返回序列 $seq 的 GC 含量
- meanqual($seq) 返回 fastq 格式的序列 $seq 的平均Q值
- reverse($seq) 返回序列 $seq 的反意链
- revcomp($seq) 返回序列 $seq 的反意互补链
- qualcount($qual, threshold) 返回高于threshold的$qual的数量
- trimq(qual, beg, end, param) Trims the quality string qual in the Sanger scale
- and(x, y)位运算符且
- or(x, y)位运算符或
- xor(x, y)位运算符异或
实例:
操作fasta文件:
- 获得fasta文件中每条序列的长度:
bioawk -c fastx '{ print $name, length($seq) }' hg19.fasta
- 获得fasta文件中每条序列的GC含量:
bioawk -c fastx '{print $name,gc($seq)}' hg19.fasta
- 获得反向互补序列:
bioawk -c fastx '{ print ">"$name;print revcomp($seq) }' hg19.fasta
- 筛选出长度大于100bp的序列:
bioawk -c fastx 'length($seq) > 100{ print ">"$name; print $seq }' hg19.fasta
- 给序列名称添加前缀或者后缀:
bioawk -c fastx '{ print ">PREFIX"$name; $seq }' input.fasta
bioawk -c fastx '{ print ">"$name"|SUFFIX"; $seq }' input.fasta
- 将fasta文件修改为tab分割的文件:
bioawk -t -c fastx '{ print $name, $seq }' input.fasta
操作fastq文件:
- 统计reads数目:
# 对于4行一个read的文件
bioawk -t -c fastx 'END {print NR}' input.fastq
- 转为fasta文件:
bioawk -c fastx '{print ">"$name; print $seq}' input.fastq
- 获得每条reads的平均质量值:
bioawk -c fastx '{print ">"$name; print meanqual($qual)}' input.fastq
- 过滤掉长度小于10 bp 的reads:
bioawk -cfastx 'length($seq) > 10 {print "@"$name"\n"$seq"\n+\n"$qual}' input.fastq
- 根据质量修剪reads:
# 去除0-5bp内质量值小于30的reads(Richard Motts algorithm (used in Phred)
bioawk -c fastx ' trimq(30, 0, 5){print $0}' input.fastq
- 统计以GATTAC开头的reads的数量
bioawk -c fastx '$seq~/^GATTAC/ {++n} END { print n }' input.fastq.gz
操作bed文件:
- 提取每个feature的范围:
bioawk -c bed '{ print $end - $start }' test.bed
操作SAM文件:
- 提取unmapped reads:
bioawk -c sam 'and($flag,4)' input.sam
- 提取 mapped reads(带header):
bioawk -c sam -H '!and($flag,4)' input.sam
(顺便:查询flag所表示信息:https://broadinstitute.github.io/picard/explain-flags.html)
- sam转为fasta:
bioawk -c sam '{ s=$seq; if(and($flag, 16)) {s=revcomp($seq) } print ">"$qname"\n"s}' input.sam > output.fasta
操作vcf文件:
- 提取样本foo和bar的基因型:
grep -v ^## in.vcf | bioawk -tc hdr '{print $foo,$bar}'
更多原创精彩视频敬请关注生信杂谈: