abc.txt
Linuxシステムには次のファイルがあります。
abc|yes|50c|1|pending
bcd|no|100c|1|pending
cde|yes|45c|2|pending
def|no|44c|2|pending
4番目のフィールドに基づいて、ファイルを2つのファイルに分割しました。1.txt
:
abc|yes|50c|1|pending
bcd|no|100c|1|pending
そして2.txt
cde|yes|45c|2|pending
def|no|44c|2|pending
2番目のフィールドが「はい」の場合は3番目のフィールドをパラメータとして使用し、2番目のフィールドは「いいえ」の場合は最初のフィールドをパラメータとして使用してスクリプトを並列に実行するスクリプトを呼び出したいと思います。 1.txtを実行してから2.txtを実行し、スクリプトが失敗した場合は、最後のフィールドを保留から失敗/成功に更新する必要があります。 (私のスクリプトは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