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・標準エラー出力はです。リダイレクトをこれらの番号で切り替えることができます(後述)。

$ 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
# 何も保存されていない

スポンサーリンク