5つの入力変数を持つループをどのように生成しますか?

5つの入力変数を持つループをどのように生成しますか?

正しく実行するには、5つの入力を必要とする排他的なコマンドがあります。

command -cval <value> -tval <value> -dval <value> -kval <value>

構成ファイル内の項目を1行ずつ読み取ってこのコマンドを実行できる必要があります。これにより、この5つの値に対する新しい要求がある場合は、構成ファイルの下部に新しいデータ行を簡単に追加できます。スクリプトを再実行してください。簡単ですか? ? ?

私の設定ファイルは「GROUP」プレフィックスに設定されているので、この方法ではファイル内の「GROUP」を含む行のみをgrepすることができるので、処理したいのと同じ形式で設定ファイルに新しいエントリを簡単に追加できます(これは良い考えです)かどうかわからない):

## ORIG CONFIG FILE ##
cval, tval, dval, mval, kval    
cval, tval, dval, mval, kval
cval, tval, dval, mval, kval
...

## GROUP APPENDED CONFIG FILE ##
GROUP, cval, tval, dval, mval, kval     
GROUP, cval, tval, dval, mval, kval
GROUP, cval, tval, dval, mval, kval
...

注:構成ファイルのこれらの値は重複する可能性があるため、1行ずつ処理したいと思います。また、設定ファイルを好きなように設定できるので、この方法が最適な理由と最適でない理由を自由に教えてください。

私の質問:次のようにデータを処理するためにループでコマンドを実行するにはどうすればよいですか?

LOOP1(最初の行)コマンドcval、tval、dval、mval、kval

LOOP2(2行目)コマンドcval、tval、dval、mval、kval

LOOP3(3行目)はcval、tval、dval、mval、kvalコマンドを実行します。

...などが設定ファイルの各行を繰り返します。

答え1

このファイルが与えられたら:

$ cat input
GROUP, cval1, tval1, dval1, mval1, kval1
DISREGARD, you, should, not, parse, this, line
GROUP, cval2, tval2, dval2, mval2, kval2
GROUP, cval3, tval3, dval3, mval3, kval3

次のスクリプトが与えられました。

#!/bin/bash
awk -F, '/^GROUP/ {print $2,$3,$4,$5,$6}' input | while read c t d m k; do
  echo -cval $c -tval $t -dval $d -mval $m -kval $k
done

我々は次のような結果を得る。

$ ./go.sh
-cval cval1 -tval tval1 -dval dval1 -mval mval1 -kval kval1
-cval cval2 -tval tval2 -dval dval2 -mval mval2 -kval kval2
-cval cval3 -tval tval3 -dval dval3 -mval mval3 -kval kval3

echo排他コマンドで置き換えると準備が完了します。

答え2

そしてGNUパラレル(そして提供された入力を恥ずかしく貸します。ドゥブゴッティの答え

grep '^GROUP' input | parallel --col-sep ', *' -- \
  /bin/echo -cval {2} -tval {3} -dval {4} -mval {5} -kval {6}

出力:

-cval cval1 -tval tval1 -dval dval1 -mval mval1 -kval kval1
-cval cval2 -tval tval2 -dval dval2 -mval mval2 -kval kval2
-cval cval3 -tval tval3 -dval dval3 -mval mval3 -kval kval3

/bin/echo実際のコマンドに置き換えてください。

答え3

sed方法:

sed -n '/^GR/{s/^GROUP/command/
              s/,/-c/
              s/,/-t/
              s/,/-d/
              s/,/-m/
              s/,/-k/
              s/-./ &val /gp}' input

出力(与えられた内容OP):

command -cval cval -tval tval -dval dval -mval mval -kval kval
command -cval cval -tval tval -dval dval -mval mval -kval kval
command -cval cval -tval tval -dval dval -mval mval -kval kval

実際に出力を実行するには(エラーコードがあるかどうかを再確認してから)、次のように変更しますgpgpロバルリント)で終わるgegローカルe評価)。

関連情報