bowtie2 使い方 アライメント情報(alignment summary)をファイルに保存する
バイオインフォ道場、くまぞうです。
bowtie2 アライメント情報と標準エラー出力
bowtie2のアライメント情報(alignment summary)をファイル保存する方法について考えます。Linuxのコマンド結果は、通常、ファイルへのリダイレクト(>)が簡単に行えます。しかし、bowtie2のマッピング結果は、通常のリダイレクト(>)では保存できません。画面への出力に違いはありませんが、標準エラー出力として出力されているため、通常のリダイレクトを使ってもファイルには何も保存されません。この場合、標準エラーをリダイレクトする必要があります。標準エラー出力をファイルにリダイレクトするのに難しい操作は必要ありません。是非、この機会に、標準出力と標準エラー出力のリダイレクトの仕方を習得しましょう。
bowtie2 マッピング ペアエンド
bowtie2でペアエンドのデータをマッピングする場合には、以下のようにコマンドを実行します。インストールフォルダに、example/としてデータなどが入っているので、動作確認などで使うことができます。
$ bowtie2 -x lambda_virus -1 example/reads/reads_1.fq -2 example/reads/reads_2.fq -S eg2.sam
bowtie2 アライメント情報 表示内容
bowtie2でマッピングが完了すると、以下のようなアライメント情報(alignment summary)が出力されます。これは標準エラー出力として表示されます。
$ bowtie2 -x lambda_virus -1 example/reads/reads_1.fq -2 example/reads/reads_2.fq -S eg2.sam 10000 reads; of these: 10000 (100.00%) were paired; of these: 834 (8.34%) aligned concordantly 0 times 9166 (91.66%) aligned concordantly exactly 1 time 0 (0.00%) aligned concordantly >1 times ---- 834 pairs aligned concordantly 0 times; of these: 42 (5.04%) aligned discordantly 1 time ---- 792 pairs aligned 0 times concordantly or discordantly; of these: 1584 mates make up the pairs; of these: 1005 (63.45%) aligned 0 times 579 (36.55%) aligned exactly 1 time 0 (0.00%) aligned >1 times 94.97% overall alignment rate
bowtie2 アライメント情報 ファイル保存方法
bowtie2のアライメント情報(alignment summary)を、(通常の方法で)ファイルリダイレクト(command > align_summary.log)してみます。ファイルは生成されますが、中身は何も保存されていません。実際、ファイルサイズは0で空のファイルが生成されるだけです。画面にはアライメント情報が表示されます。
$ bowtie2 -x lambda_virus -1 example/reads/reads_1.fq -2 example/reads/reads_2.fq -S eg2.sam > align_summary.log # アライメント情報は画面表示される 10000 reads; of these: ... 94.97% overall alignment rate $ls *.log # サイズ0。なにも保存されていない。 -rw-rw-r-- 1 user 0 2018/1/1 align_summary.log
bowtie2のアライメント情報(alignment summary)をファイルに保存するには、標準エラーをファイルリダイレクト(command 2> align_summary.log)します。ここで使う数字の「2」は、ファイル・ディスクリプターと呼ばれる番号です。標準出力は1・標準エラー出力は2です。リダイレクトをこれらの番号で切り替えることができます(後述)。
$ bowtie2 -x lambda_virus -1 example/reads/reads_1.fq -2 example/reads/reads_2.fq -S eg2.sam 2> align_summary.log # 結果は画面表示されません(ファイルに出力されます) $ls *.log # アライメント情報が保存されています -rw-rw-r-- 1 user 587 2018/1/1 align_summary.log $ cat align_summary.log 10000 reads; of these: 10000 (100.00%) were paired; of these: 834 (8.34%) aligned concordantly 0 times 9166 (91.66%) aligned concordantly exactly 1 time 0 (0.00%) aligned concordantly >1 times ---- 834 pairs aligned concordantly 0 times; of these: 42 (5.04%) aligned discordantly 1 time ---- 792 pairs aligned 0 times concordantly or discordantly; of these: 1584 mates make up the pairs; of these: 1005 (63.45%) aligned 0 times 579 (36.55%) aligned exactly 1 time 0 (0.00%) aligned >1 times 94.97% overall alignment rate
標準出力と標準エラー出力
プログラムが情報を画面に出力する場合、通常の情報は標準出力へ・エラーが発生した場合のメッセージは標準エラー出力へ、と表示先を切り替えることがあります。簡単な例で確認してみます。
標準出力のリダイレクト
通常、コマンド結果は標準出力として出力されるので、リダイレクト(>)を指定するだけで、結果をファイルへ保存することができます。リダイレクトでファイル・ディスクリプターを指定しない場合(デフォルト)は、書き込みは標準出力となります。あまり指定する機会はありませんが、標準出力を明示的に指定する場合は1を指定します。
# 標準出力 $ echo "hello!" hello! # 標準出力のリダイレクト(hello.txtへ出力) $ echo "hello!" > hello.txt $ cat hello.txt hello! # 標準出力のリダイレクト(ファイル・ディスクリプタ1(標準出力)を明示的に指定) $ echo "hello!" 1> hello_1.txt $ cat hello_1.txt hello!
標準エラー出力のリダイレクト
コマンドのエラーメッセージは標準エラー出力として出力されます。リダイレクト(>)の際、ファイル・ディスクリプターで2を指定すると、エラーメッセージをファイルへ保存することができます。
# わざとエラーを発生させる(存在しないファイルを指定) $ cat a.txt cat: a.txt: そのようなファイルやディレクトリはありません $ cat a.txt 2> error_2.txt # エラーメッセージがerror_2.txtに保存されていることを確認する $ cat error_2.txt cat: a.txt: そのようなファイルやディレクトリはありません(ファイル保存内容!) # hello!は標準出力。標準エラー出力には何も出力されていないので、何も保存されない $ echo "hello!" 2> hello_2.txt hello! $ cat hello_2.txt # 何も保存されていない