por que esse processo paralelo não grava a saída em arquivos, mas imprime no console?

por que esse processo paralelo não grava a saída em arquivos, mas imprime no console?

Isenção de responsabilidade: esta é uma questão mais geral daquelaEu perguntei em biostars.orgsobre paralelo e gravação em arquivo.

Quando executo um programa (obisplitdo obitoolspacote) sequencialmente, ele lê um arquivo e cria vários arquivos com base em algum critério (não importante aqui) no arquivo original:

input_file.fastq
     |____ output_01.fastq
     |____ output_02.fastq
     |____ output_03.fastq

No entanto, quando divido o arquivo de entrada e os executo em paralelo (versão do repositório do Ubuntu: 20141022),

find . * | grep -P "^input_file" | parallel -j+3 obisplit -p output_{/.}_ -t variable_to_split_on {/}

Eu esperaria obter arquivos

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

mas a saída é impressa apenas no console.

Existe algo inerente parallelque faz com que essa impressão console ou poderia ser essa a maneira como obisplitela está se comportando por qualquer motivo? Existe uma maneira de convencer cada núcleo comandado parallela imprimir em um arquivo específico em vez do console?

Responder1

Parece que obisplitse comporta de maneira diferente se a saída for redirecionada.

Você pode pedir ao GNU Parallel para gerar arquivos:

seq 10 | parallel --results output_{} echo this is input {} >/dev/null

(ou se sua versão for mais antiga:

seq 10 | parallel echo this is input {} '>' output_{}

)

Ele criará output_#, output_#.err, output_#.seq.

informação relacionada