【问题标题】:Rewriting nested loops using parallel where the arguments for second loop depends on arguments of first loop使用并行重写嵌套循环,其中第二个循环的参数取决于第一个循环的参数
【发布时间】:2021-09-11 21:19:13
【问题描述】:

用例: 我有两个嵌套的 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=$1
$part=$2
do something using $node and $part
}

parallel doit ::: <arguments for first for loop> ::: <arguments for second for loop>

使用并行运行时如何提供这些参数?

【问题讨论】:

    标签: parallel-processing gnu-parallel


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 2013-08-04
      • 1970-01-01
      • 2022-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多