GNU parallel
の使用: http://www.gnu.org/software/parallel/
私は2つの引数を取るプログラムを持っています、例えば。
$ ./prog file1 file2
$ ./prog file2 file3
...
$ ./prog file23456 file23457
ファイル名のペアを生成するスクリプトを使用していますが、スクリプトの結果がペアではなく単一の文字列であるため、これは問題を引き起こします。お気に入り:
$ ./prog "file1 file2"
GNU parallel
の袖にはたくさんのトリックがあるようですが、区切り文字の周りにテキストを分割するためのトリックがあるのではないかと思います。
$ generate_file_pairs | parallel ./prog ?
# where ? is text under consideration, like "file1 file2"
簡単な回避策は、progで手動で引数を分割することですが、GNU parallel
でそれが可能かどうかを知りたいです。
あなたはおそらく--colsep
を探しています。
generate_file_pairs | parallel --colsep ' ' ./prog {1} {2}
詳細については、man parallel
をお読みください。まだ行っていない場合は、紹介ビデオをご覧ください http://www.youtube.com/watch?v=OpaiGYxkSuQ
Parallelのマニュアルでは、次のように述べられています。
コマンドが指定されていない場合、入力行が実行されます... GNU parallelは、xargsまたはcat | bashの代わりに使用できることがよくあります。
だから試してみてください:
generate command | parallel
これの出力を理解してみてください:
for i in {1..5};do echo "echo $i";done | parallel
あなたは探している -n
並列のオプション。これはあなたが探しているものです:
./generate_file_pairs | parallel -n 2 ./prog {}
GNU Parallel Doc からの抜粋:
-n max-args
Use at most max-args arguments per command line. Fewer than max-args
arguments will be used if the size (see the -s option) is exceeded,
unless the -x option is given, in which case GNU parallel will exit.