生信黑板報之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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • awk:報告生成器,格式化文本輸出 內容: awk介紹 awk基本用法 awk變量 awk格式化 awk操作符 a...
    BossHuang閱讀 1,469評論 0 9
  • awk介紹awk變量printf命令:實現格式化輸出操作符awk patternawk actionawk數組aw...
    哈嘍別樣閱讀 1,599評論 0 4
  • 本章主要學習內容awk介紹 ?awk基本用法 ?awk變量 ?awk格式化 ?awk操作符 ?awk條件判斷 ?a...
    楠人幫閱讀 1,297評論 0 8
  • awk: grep,sed,awk grep:文本過濾 sed:文本編輯 awk:文本格式化工具; 1 什么是aw...
    木林森閱讀 1,829評論 0 16
  • 基礎命令 主要的命令和快捷鍵 Linux系統命令由三部分組成:cmd + [options]+[operation...
    485b1aca799e閱讀 1,126評論 0 0