並列性を使用してリストに複数の引数を持つプログラムを実行する

並列性を使用してリストに複数の引数を持つプログラムを実行する

次のように、コマンドライン(Ubuntu)を介して実行されるbashプログラムがあります。

./extract_field.sh ABC001

ABC001与えられた形状ファイルから抽出したいフィールドIDはどこにありますか?

複数のIDでこのスクリプトを実行するには、まずファイルに1行に1つのIDを保存しますlist.txt

ABC001
ABC014
ABC213
ABC427

次に、次のようにスクリプトを呼び出しますparallel

parallel -a list.txt ./extract_field.sh

今まではそんなに良くなった。

extract_field.shただし、1つのパラメータしか必要とせず、2つを必要とするように変更する予定です。このように、1行に2つのパラメータを受け入れるようにテキストファイルを変更すると、上記のワークフローは引き続き機能しますか?

ABC001 arg2a
ABC014 arg2b
ABC213 arg2c
ABC427 arg2d

parallel -a list.txt ./extract_field.shこの変化で、私は次のように行動したい

./extract_field.sh ABC001 arg2a
./extract_field.sh ABC014 arg2b

など。

そうなんですか?

リクエストする前にテストすることもできましたが、スクリプトのこの変更が完了するまでに数時間かかることがあるので、最初にリクエストすることにしました(単純な変更のように聞こえますが)。

ベストアンサー1

コマンド構文に列区切り文字を指定して、並列機能を使用して単一のコマンドに複数の引数を指定できます。

parallel --colsep ' ' -a list.txt ./extractfield.sh {1} {2}

次の結果を提供します

./extract_field.sh ABC001 arg2a
./extract_field.sh ABC014 arg2b

ファイルに次のものがlist.txt含まれているとします。

ABC001 arg2a
ABC014 arg2b

あるいは、両方とも複数の位置引数が必要なので、cpそれを使用してテストできます。mv

便利なパラレルマンページ

おすすめ記事