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 (obisplit
do obitools
pacote) 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 parallel
que faz com que essa impressão console ou poderia ser essa a maneira como obisplit
ela está se comportando por qualquer motivo? Existe uma maneira de convencer cada núcleo comandado parallel
a imprimir em um arquivo específico em vez do console?
Responder1
Parece que obisplit
se 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
.