带索引的并行嵌套循环

Parallel nested loop with index

如何在 gnu parallel 中编写如下所示的嵌套循环?

for h in GetHypervisors
  echo h
  for vm in GetVMs[h]
     echo vm

我试过这个例子,但我不确定如何将值传递给嵌套循环。

parallel echo {Hypervisor}; echo {VM} ::: vms {} ::: Hypervisors

GNU Parallel 可以像这样计算两个列表的乘积:

parallel echo {1}; echo {2} ::: vm1 vm2 ::: hypervisor1 hypervisor2

但我认为您不需要该产品,我认为您希望 VM-list 依赖于 hypervisor-list。所以你需要做:

for h in GetHypervisors; do
   for vm in $(GetVMs $h); do
     echo $h,$vm
   done
done | parallel --colsep , echo hypervisor-{1} vm-{2}

如果 GetVMs 很慢,您也可以并行化外循环。