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