如何创建具有五 (5) 个输入变量的循环?

如何创建具有五 (5) 个输入变量的循环?

我有一个专有命令,需要五 (5) 个输入才能正确执行该命令。

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

我需要能够通过逐行读取配置文件中的条目来运行此命令,以便当给我提供这 5 个值的新要求时,我可以简单地在配置文件的底部附加一行新数据,重新运行脚本。简单吧???

我的配置文件设置为带有“GROUP”前缀,因此我可以通过这种方式仅 grep 文件中包含“GROUP”的行,以便可以以要处理的相同格式轻松地将新条目添加到配置文件中(不确定这是一个好主意):

## 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
...

请注意:配置文件中的这些值可能是重复的,这就是我希望逐行处理它们的原因。另外,我可以随意设置配置文件,所以请随时告诉我为什么这种方式是或不是最佳的。

我的问题:如何在循环中运行命令来处理我的数据,如下所示:

LOOP1(第一行)命令 cval、tval、dval、mval、kval

LOOP2(第二行)命令 cval、tval、dval、mval、kval

LOOP3(第三行)命令 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

要实际运行输出(仔细检查其中是否有任何错误代码后),请更改gp(g洛巴尔林特p) 末尾为ge(g局部e评估)。

相关内容