并行运行脚本,一组一组地分割主文件?

并行运行脚本,一组一组地分割主文件?

abc.txt我在 Linux 机器上有一个文件,如下所示:

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

我根据第四个字段将该文件拆分为两个文件。1.txt:

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

2.txt

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

如果第二个字段为“是”,我想调用一个以第三个字段作为参数的脚本,或者如果第二个字段为“否”,则将第一个字段作为参数,并并行运行脚本。 1.txt 应该运行,然后是 2.txt,如果任何脚本失败,它应该将最后一个字段从待处理更新为 FAILED/SUCCESS。(我的脚本传递 0-成功,1-失败返回代码)

例如:

1.txt

ksh script1.ksh 50c
ksh script1.ksh bcd

2.txt

ksh script1.ksh 45c
ksh script1.ksh def

答案1

#!/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

相关内容