[背景]
DNAやタンパク質のペアワイズアラインメントができるBLAST(Basic Local Alignment Search Tool)のスタンドアロン版であるLocal BLAST.コマンドライン上で相同性検索など行え,自分が得たデータなんかを解析する時に大いに役立つ.
Local BLASTを実行するときに,出力ファイルのフォーマットを変更できるoutfmtというオプションがある.
outfmt 6 がタブ区切りファイルなので,多量の検索を行った時の概略を確認するときに有効である.
2つの配列の相同性の度合いを見るときにアラインメントスコアやe値に注目する.簡単に言うと,スコアは高いほうが,e値は0に近いほうが相同性が高いとみなされる.e値の閾値を設定することはevalueというオプションで設定できるが,実はこのオプションの引数が0位上の実数であるため,0.0を指定することができない.今回はコマンドライン上でe値の検索を行うため試行錯誤した.
[結論]
1 |
grep $'\t'"0.0"$'\t' [filename] |
詳細・解説
e-value=0.0なんていうのは遺伝子探索の時ではめったに無いが,コロニーPCRでクローニングされたシークエンスの同一性の判別等,時には極めて高い確立で一致している配列のみがほしいこともある.
e-valueの閾値設定で0.0を指定することが不可能ならば,出力したファイルからそれを抽出すれば良い.まあ出力ファイルをタブ区切りにできる時点で,Excelなどの表計算ソフトでソートしてやればいいんだが,もっとスマートな方法がないかさがしてみた.そこで候補に上がったのが,grepを使って”0.0”を持つ行を抽出してくることである.
Local BLASTはコマンドライン上のツールであることは既述したが,ターミナル上でアラインメントから検索・抽出まで一貫してできたらかっこいい.どうせならコマンドで済ませてしまいたいということからgrepを使う.
grepはUNIX系コマンドの一つで,
1 |
grep "pattern" [file name] |
とすることで”pattern”に該当するパターン文字列をファイル内から検索してくれる.マッチした行があれば,デフォルトではその行を出力する(環境によっては該当箇所をハイライトしてくれる).
これで「grep “0.0” blastres.out」なんて打ち込んでやれば一発じゃないか!と喜びたいのだが,問題が2つほどある.
一つ目は,検索文字列がパターンであるということ.ご存知の通り,パターンマッチにおいて”.”は「改行以外の任意の1文字」をあらわす.したがって”0.0″というように検索すると,0.0の他にも,”000″や”0a0″,果てにはタブを挟んで02つ,などと小数点として検索されない.
これを回避するには,単にピリオドをエスケープさせて”0\.0″というように検索するだけでよい.
二つ目は,0.0という文字列がe値以外の要素でも出現しうるという点である.例えば,相同性(% identity)などは最高で100.00%と表示されるし,配列名に0.0が入っている場合だって考えられる.そういった候補を外す必要がある.
e値での0.0のみをヒットさせるにあたって,その特徴を考えた.100.00のように,0.0の前後には文字ではなくタブが入っているのが該当する箇所の特徴である.したがって,0.0をタブで挟んだ文字列を検索対象とすればe値のみを抽出させられるのではないか.タブ文字は$’\t’で指定できるので,最初に示したとおり $’\t'”0.0″$’\t’ と指定するとよい.
文面が汚いので,そのうち推敲して再投稿したい.