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 (obisplit
del obitools
paquete) 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 parallel
que hace que esta impresión sea consoladora o podría ser esta la forma en obisplit
que se comporta por cualquier motivo? ¿Hay alguna manera de convencer a cada núcleo comandado por parallel
para que imprima en un archivo específico en lugar de en la consola?
Respuesta1
Parece como si obisplit
se 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
.