为什么这个并行进程不将输出写入文件而是打印到控制台?

为什么这个并行进程不将输出写入文件而是打印到控制台?

免责声明:这是一个更普遍的问题我在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.

相关内容