この並列プロセスはなぜ出力をファイルに書き込まず、代わりにコンソールに印刷するのでしょうか?

この並列プロセスはなぜ出力をファイルに書き込まず、代わりにコンソールに印刷するのでしょうか?

免責事項:これは、biostars.orgで質問しました並列処理とファイルへの書き込みについて。

プログラムを実行すると(obisplitobitoolsパッケージから) を順番に実行し、1 つのファイルを読み取り、元のファイル内の何らかの基準 (ここでは重要ではありません) に基づいて複数のファイルを作成します。

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_#.erroutput_#.seq

関連情報