¿Por qué este proceso paralelo no escribe la salida en archivos sino que la imprime en la consola?

¿Por qué este proceso paralelo no escribe la salida en archivos sino que la imprime en la consola?

Descargo de responsabilidad: Esta es una pregunta más general de la quePregunté en biostars.orgsobre paralelo y escritura en archivo.

Cuando ejecuto un programa (obisplitdel obitoolspaquete) secuencialmente, lee un archivo y crea varios archivos según algún criterio (no importante aquí) en el archivo original:

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

Sin embargo, cuando divido el archivo de entrada y los ejecuto en paralelo (versión del repositorio de ubuntu: 20141022),

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

Esperaría recibir archivos

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

pero la salida solo se imprime en la consola.

¿Hay algo inherente parallelque hace que esta impresión sea consoladora o podría ser esta la forma en obisplitque se comporta por cualquier motivo? ¿Hay alguna manera de convencer a cada núcleo comandado por parallelpara que imprima en un archivo específico en lugar de en la consola?

Respuesta1

Parece como si obisplitse comportara de manera diferente si se redirige la salida.

Puede pedirle a GNU Parallel que genere archivos:

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

(o si tu versión es anterior:

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

)

Creará output_#, output_#.err, output_#.seq.

información relacionada