テキストファイルの変数を1行ずつ並列スクリプトに渡す方法

テキストファイルの変数を1行ずつ並列スクリプトに渡す方法

スクリプトが並行して実行されるように、ファイルを1行ずつ読み込み、文字列を変数として渡す必要があります。

前任者:

14
43
57

foo.txtに位置

var = $(cat foo.txt)の場合、スクリプト内でこの$ varを使用できますが、スクリプトを実行しているすべてのインスタンスに対してこの変数を変更するために並列をどのように呼び出しますか?

答え1

もしあなたなら本物変数を設定したい:

parallel -a foo.txt 'myvar={}; myscript'

しかし、それ以外はTomの解決策がほとんどの場合欲しいものだと思います。

答え2

ファイルから読み取る -a フラグとともに GNU Parallel を使用することもできます。

parallel -a foo.txt echo
14
43
57

これは最も素晴らしい例ではありませんが、テキストファイルのすべての引数に対して同じコマンドを1行ずつ実行します。並列に実行するプロセスの数を指定するには、-j フラグを含めます。

答え3

あなたはそれを使用することができますパラメータ

たとえば、次のようになります。 -input.txt

1
2
3
4

実行するコマンドcommand.sh

#/bin/bash
echo  $1: start
date
sleep 2s
echo  $1 : stop
date 

並列実行:

➜  /tmp  cat input.txt| xargs -n 1 -P 4 ./command.sh
1: start
3: start
2: start
4: start
Tue May 19 19:03:30 IDT 2015
Tue May 19 19:03:30 IDT 2015
Tue May 19 19:03:30 IDT 2015
Tue May 19 19:03:30 IDT 2015
1 : stop
4 : stop
3 : stop
2 : stop
Tue May 19 19:03:32 IDT 2015
Tue May 19 19:03:32 IDT 2015
Tue May 19 19:03:32 IDT 2015
Tue May 19 19:03:32 IDT 2015

関連情報