почему этот параллельный процесс не записывает вывод в файлы, а вместо этого выводит на консоль?

почему этот параллельный процесс не записывает вывод в файлы, а вместо этого выводит на консоль?

Отказ от ответственности: Это более общий вопрос из тех,Я спросил на 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.

Связанный контент