複数行のファイルがあり、各行にはタブ区切り文字と並列に渡すパラメータがあります。
このスクリプトを実行します。
cat $hdd_file | grep $ssd | parallel -C '\t' clean_and_destroy
動作します。 $ hdd_fileはファイル名で、grepは特定の$ ssdがキャッシュされた行であるhddを収集し、並列に関数を呼び出して接続を破壊します。
これで、整理されたSSDに新しいパーティションがあるので、次のように並列を呼び出そうとします。
cat $hdd_file | grep $ssd | parallel -C '\t' create_new_cache :::+ `seq $partitions_per_ssd`
パイプからパラメータを取得して、指定された数字とペアにする必要がありますが、そうではありません。
cat $hdd_file | grep $ssd | parallel -C '\t' create_new_cache ::: {} :::+ `seq $partitions_per_ssd`
私もこれを試しましたが、まだ動作しません。何らかの理由で {}:::+ が引数として渡されます。
答え1
牛に似た一種の栄養parallel
解決策:
はいinput.txt
(デモ用):
a b
c d
e f
grep '^[ac]' input.txt
入力ソースファイルと同様に、コマンド(またはパイプ)をシミュレートするために使用されます。
parallel -C '\t' echo :::: <(grep '^[ac]' input.txt) ::: $(seq 1 3)
出力:
a b 1
a b 2
a b 3
c d 1
c d 2
c d 3
:::: argfiles
-argfiles
入力ソースとして扱われます。:::
そして::::
混合することができます。
各入力ソースの要素を集計する--xapply
オプションを追加します。
parallel -C '\t' --xapply echo :::: <(grep '^[ac]' input.txt) ::: $(seq 1 2)
出力:
a b 1
c d 2