アメリエフの技術ブログ

Amelieff Staff Blog

AWKでフィルタリング

 以前の記事(TopHat-Fusionの結果の見方)で、
「Linuxコマンドのawkを使ってfusions.outをフィルタリングする方法もあります」と書いたので、
今回はawkコマンドのご紹介をしたいと思います。

AWKコマンドは主に、テキストファイルから要素を抜き出したりするのに便利なコマンドです。

基本形

$ awk '条件文{実行文}' ファイル名


では、実際にfusions.outの7列目までを用いて、フィルタリングの例を示してみたいと思います。

chr20-chr17 49411707 59430946 ff 9 3 9
chr20-chr17 49411707 59445685 ff 106 116 167
chr20-chr20 47538545 46365686 fr 17 11 9
chr17-chr17 57992061 57917126 ff 4 2 1
chr20-chr20 46415145 52210297 rf 22 18 27
chr2-chr17 142237963 37265642 rr 2 3 2


(1) 融合遺伝子の染色体番号
(2) 融合遺伝子の左側の遺伝子上のポジション
(3) 融合遺伝子の右側の遺伝子上のポジション
(4) 左側と右側の遺伝子の向き(f:forward, r:reverse)
(5) breakpoint上のリード数
(6) breakpointを挟むペアエンドのリード数
(7) 片側のリードがbreakpoint上にあるペアエンドのリード数

たとえば、5列目のbreakpoint上のリード数でフィルタリングを行いたい場合、

$ awk '$5>100{print}' fusions.out > fusions_filtered.out


とすると、fusions_filtered.outにbreakpoint上のリード数が100より多い行が出力されます。

chr20-chr17 49411707 59445685 ff 106 116 167


条件文ではなく、実行文にifを使っても同様の処理が可能です。

$ awk '{if($5>100) print}' fusion.out > fusions_filtered.out


このように、awkはフィルタリングにも使える便利なLinuxコマンドですので、出力結果の絞り込みを行うときなどさまざまな場面で役に立ちます。

よく使うコマンドですが、意外にもこのブログで書かれていなかったので書いてみました。