多くの行を含むファイルがあり、各行にタブ区切り文字と並行して渡す引数があります。
このスクリプトを実行します
cat $hdd_file | grep $ssd | parallel -C 't' clean_and_destroy
そして、それは機能します。$ hdd_fileはファイル名であり、grepはhddが特定の$ ssdを持つ行をキャッシュとして収集し、並列がそれらの接続を破棄する関数を呼び出します。
クリーンアップされた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`
私もこれを試しましたが、まだ機能しません。 {}:::+は何らかの理由で引数として渡されます
承認された回答:
GNUparallel
解決策:
サンプル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