この並列プロセスが出力をファイルに書き込むのではなく、コンソールに印刷するのはなぜですか?

この並列プロセスが出力をファイルに書き込むのではなく、コンソールに印刷するのはなぜですか?

免責事項:これはより一般的な質問です。biostars.orgに尋ねたら並列処理およびファイル書き込み情報。

プログラムを実行するとき(obisplitobitools包装から)はファイルを順次読み込み、元のファイルのいくつかの基準に従って複数のファイルを作成します(ここでは重要ではありません)。

input_file.fastq
     |____ output_01.fastq
     |____ output_02.fastq
     |____ output_03.fastq

ただし、入力ファイルを分割して並列に実行すると(Ubuntuストアバージョン:20141022)、

find . * | grep -P "^input_file" | parallel -j+3 obisplit -p output_{/.}_ -t variable_to_split_on {/}

ファイルを受け取りたいです。

input_file_a.fastq
     |____ output_input_file_a_01.fastq
     |____ output_input_file_a_02.fastq
     |____ output_input_file_a_03.fastq
input_file_b.fastq
     |____ output_input_file_b_01.fastq
     |____ output_input_file_b_02.fastq
     |____ output_input_file_b_03.fastq
input_file_c.fastq
     |____ output_input_file_c_01.fastq
     |____ output_input_file_c_02.fastq
     |____ output_input_file_c_03.fastq

ただし、出力はコンソールにのみ印刷されます。

parallelこれがコンソールを印刷する固有の理由はありますか?それとも、obisplit何らかの理由でそのように動作する可能性がありますか?各コアがparallelコンソールの代わりに特定のファイルに印刷するように説得する方法はありますか?

ベストアンサー1

obisplit出力がリダイレクトされると動作が変わるようです。

GNU Parallelにファイルとして出力するように依頼できます。

seq 10 | parallel --results output_{} echo this is input {} >/dev/null

(またはバージョンが以前の場合:

seq 10 | parallel echo this is input {} '>' output_{}

)

output_#、、、output_#.errを生成しますoutput_#.seq

おすすめ記事