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