Run scripts in parallel, one set after another splitting main file?

Run scripts in parallel, one set after another splitting main file?

Tengo un archivo abc.txtcomo este en una máquina Linux:

abc|yes|50c|1|pending
bcd|no|100c|1|pending
cde|yes|45c|2|pending
def|no|44c|2|pending

He dividido este archivo en dos archivos según el cuarto campo. 1.txt:

abc|yes|50c|1|pending
bcd|no|100c|1|pending

Y2.txt

cde|yes|45c|2|pending
def|no|44c|2|pending

Si el segundo campo es "sí", quiero llamar a un script con el tercer campo como parámetro, o si el segundo campo es "no", el primer campo como parámetro y ejecutar los scripts en paralelo. 1.txt debe ejecutarse, luego 2.txt y si algún script falla, debe actualizar el último campo de pendiente a FALLADO/ÉXITO. (Mis scripts pasan el código de retorno 0-éxito, 1-fallido)

Por ejemplo:

1.txt

ksh script1.ksh 50c
ksh script1.ksh bcd

2.txt

ksh script1.ksh 45c
ksh script1.ksh def

Respuesta1

#!/bin/bash

runksh() {
    ksh script1.sh "$1";
}
export -f runksh

doit() {
    parallel --joblog +my.log --colsep '\|' \
             runksh '{=1 $_ = $arg[2] eq "yes" ? $arg[3] : $arg[1] =}' {};
}
export -f doit

parallel -u --colsep '\|' -j1 --group-by 3 --pipepart -a abc.txt doit

# my.log now contains whether a job succeeded or failed
# Extract exit code + argument
awk -e '$7 != 0 { print $11"|"$12"|"$13"|"$14"|FAILED"; }' my.log > failed
awk -e '$7 == 0 { print $11"|"$12"|"$13"|"$14"|SUCCEEDED"; }' my.log > succeeded
cat failed succeeded

información relacionada