GNUパラレル - 配列の2つのパラメータを引数として使用する

GNUパラレル - 配列の2つのパラメータを引数として使用する

Gnu並列性を使用するスクリプトがあります。各「繰り返し」ごとに2つのパラメータを渡したいと思います。

シリアル実行には次のものがあります。

for (( i=0; i<=10; i++ ))
do
  a = tmp1[$i]
  b = tmp2[$i]
done

並列化したいです。

func pf()
{
   a=$1
   b=$2
}
export -f pf
parallel --jobs 5 --linebuffer pf ::: <what to write here?>

ベストアンサー1

集中を維持するために他のparallelフラグを省略しています...

parallel --link pf ::: A B ::: C D

まず、次のようにa=A関数をb=C実行します。a=Bb=D

a=A b=C
a=B b=D

それ以外の場合は、--link次のような完全な組み合わせを得ることができます。

a=A b=C
a=A b=D
a=B b=C
a=B b=D

修正する:Ole Tangeがコメントで述べたように、[削除済み -エド。]これを行うもう1つの方法があります::::+演算子を使用することです。ただし、これら2つのオプションには重要な違いがあります。もしパラメーター位置ごとにパラメーター数が同じではありません。説明するために例を見てください。

parallel --link pf ::: A B ::: C D E出力:

a=A b=C
a=B b=D
a=A b=E

parallel pf ::: A B :::+ C D E出力:

a=A b=C
a=B b=D

したがって、--linkすべてのパラメータが消費されるように「ラップ」され、:::+追加のパラメータは無視されます。 (通常の場合、--link代替は自動的に入力を無視することですので、私はそれを好みます。YMMV。)

おすすめ記事