GNU/Linux >> Tutoriales Linux >  >> Linux

¿Paralelizar un Bash For Loop?

He estado tratando de paralelizar el siguiente script, específicamente cada una de las tres instancias de bucle FOR, usando GNU Parallel pero no he podido. Los 4 comandos contenidos en el bucle FOR se ejecutan en serie, cada bucle tarda unos 10 minutos.

#!/bin/bash

kar='KAR5'
runList='run2 run3 run4'
mkdir normFunc
for run in $runList
do 
  fsl5.0-flirt -in $kar"deformed.nii.gz" -ref normtemp.nii.gz -omat $run".norm1.mat" -bins 256 -cost corratio -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 12 
  fsl5.0-flirt -in $run".poststats.nii.gz" -ref $kar"deformed.nii.gz" -omat $run".norm2.mat" -bins 256 -cost corratio -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 12 
  fsl5.0-convert_xfm -concat $run".norm1.mat" -omat $run".norm.mat" $run".norm2.mat"
  fsl5.0-flirt -in $run".poststats.nii.gz" -ref normtemp.nii.gz -out $PWD/normFunc/$run".norm.nii.gz" -applyxfm -init $run".norm.mat" -interp trilinear

  rm -f *.mat
done

Respuesta aceptada:

¿Por qué no los bifurca (también conocido como fondo)?

foo () {
    local run=$1
    fsl5.0-flirt -in $kar"deformed.nii.gz" -ref normtemp.nii.gz -omat $run".norm1.mat" -bins 256 -cost corratio -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 12 
    fsl5.0-flirt -in $run".poststats.nii.gz" -ref $kar"deformed.nii.gz" -omat $run".norm2.mat" -bins 256 -cost corratio -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 12 
    fsl5.0-convert_xfm -concat $run".norm1.mat" -omat $run".norm.mat" $run".norm2.mat"
    fsl5.0-flirt -in $run".poststats.nii.gz" -ref normtemp.nii.gz -out $PWD/normFunc/$run".norm.nii.gz" -applyxfm -init $run".norm.mat" -interp trilinear
}

for run in $runList; do foo "$run" & done

En caso de que no esté claro, la parte significativa está aquí:

for run in $runList; do foo "$run" & done
                                   ^

Haciendo que la función se ejecute en un shell bifurcado en segundo plano. Eso es paralelo.


Linux
  1. Ejemplos de ciclos for y while de Bash

  2. Manteniéndote al tanto – Bash For, While, Until Ejemplos de bucles

  3. 12 ejemplos de Bash For Loop para su secuencias de comandos de Linux Shell

  4. Bash para ejemplos de bucle

  5. bash de linux. para bucle y función, para sumar números

Bash For Loop con ejemplos prácticos

Bash Scripting – Para bucle explicado con ejemplos

Bash For Loops con ejemplos

Bash For Loop:la guía más práctica

El Bash FOR Loop explicado y simplificado

Bash Script for Loop explicado con ejemplos