使用并行重写嵌套循环,其中第二个循环的参数取决于第一个循环的参数
Rewriting nested loops using parallel where the arguments for second loop depends on arguments of first loop
用例:
我有两个嵌套的 for 循环,其中提供给第二个循环的参数取决于提供给第一个循环的参数。
for node in `ls -l $dir | grep $pattern1`
do
for part in `ls -l $dir/$node | grep $pattern2`
do something using $node and $part
done
done
为了使用并行重写,我创建了一个函数:
doit(){
$node=
$part=
do something using $node and $part
}
parallel doit ::: <arguments for first for loop> ::: <arguments for second for loop>
运行 使用并行时如何提供这些参数?
GNU Parallel 无法直接执行此操作,因此您需要手动生成组合:
for node in `ls -l $dir | grep $pattern1`; do
for part in `ls -l $dir/$node | grep $pattern2`; do
printf "$node\t$part\n"
done
done | parallel --dry-run --colsep '\t' doit {1} {2}
您可以像这样使用 skip()
:
parallel --dry-run doit '{= -e "$arg[1]/$arg[2]" or skip() =}' ::: all nodes ::: all parts
用例: 我有两个嵌套的 for 循环,其中提供给第二个循环的参数取决于提供给第一个循环的参数。
for node in `ls -l $dir | grep $pattern1`
do
for part in `ls -l $dir/$node | grep $pattern2`
do something using $node and $part
done
done
为了使用并行重写,我创建了一个函数:
doit(){
$node=
$part=
do something using $node and $part
}
parallel doit ::: <arguments for first for loop> ::: <arguments for second for loop>
运行 使用并行时如何提供这些参数?
GNU Parallel 无法直接执行此操作,因此您需要手动生成组合:
for node in `ls -l $dir | grep $pattern1`; do
for part in `ls -l $dir/$node | grep $pattern2`; do
printf "$node\t$part\n"
done
done | parallel --dry-run --colsep '\t' doit {1} {2}
您可以像这样使用 skip()
:
parallel --dry-run doit '{= -e "$arg[1]/$arg[2]" or skip() =}' ::: all nodes ::: all parts