Palmsonntagmorgen

NGSデータを使った解析と、その周辺。

【Linux】リダイレクトとパイプ

リダイレクト

> 記号を使うことで、ターミナルに出力される文字列をファイルに保存することができ、これをリダイレクトといいます。

$ echo aaa bbb
aaa bbb
$ echo aaa bbb > text.txt   # echo aaa bbb  の結果を text.txt に保存する
$ cat text.txt
aaa bbb

もともと text.txt が存在していた場合、ファイルの内容は上書きされます。既存ファイルの末尾に追記したい場合は >> とふたつ重ねて指定します。

$ echo aaa bbb > text.txt   # echo aaa bbb  の結果を text.txt に保存する
$ echo ccc ddd >> text.txt   # echo ccc ddd  の結果を text.txt に追記する
$ cat text.txt
aaa bbb
ccc ddd

パイプ

> の代わりに | を使うと、左で実行されたコマンドの結果を直接右のコマンドの入力にすることができます。
例えば以下のコマンドは、カレントディレクトリの bam で終わるファイルのうち、 ファイル名にMCF7を含むものだけを表示します。

$ ls -l *bam | grep MCF7

パイプを使いこなすと色々な作業を一行で書けるようになります。 このような一行の便利コマンドをワンライナーと呼んだりします。

  # workdirに含まれるBEDファイルの数を表示
  $ ls workdir/*.bed | wc -l 
  # peak.bedに含まれるピーク数を染色体別にカウント
  $ cut -f1 peak.bed | sort | uniq -c
  # カレントディレクトリのsraファイルを全てfastqに展開 (xargs 利用)
  $ ls *.sra | xargs fastq-dump

標準出力とエラー出力

ターミナルに表示される出力には、標準出力の他に、エラーメッセージ用のエラー出力というものがあります。 出力結果が標準出力かエラー出力かはツール依存です。例えば bowtie のマッピングスタッツはエラー出力になっています。

上の >| を使った操作は標準出力のみを対象にしています。エラー出力も含めてファイルに追記したい場合は command >& file と書きます。

参考: Bashの入出力リダイレクトまとめ - Qiita