免责声明:这是一个更普遍的问题我在biostars.org上问过关于并行和写入文件。
当我运行一个程序时(obisplit
从obitools
包装中)依次读取一个文件并根据原始文件中的某种标准(此处不重要)创建多个文件:
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
.