SSD*_*ude 5 bash awk variable-substitution
我有一个专有命令,需要五 (5) 个输入才能正确执行命令。
command -cval <value> -tval <value> -dval <value> -kval <value>
Run Code Online (Sandbox Code Playgroud)
我需要能够通过逐行读取配置文件中的条目来运行此命令,以便在向我提供这 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
...
Run Code Online (Sandbox Code Playgroud)
请注意:配置文件中的这些值可能是重复的,这就是我希望逐行处理它们的原因。此外,我可以选择任何方式设置配置文件,所以请随时告诉我为什么这种方式是最佳的或不是最佳的。
我的问题:如何在循环中运行命令来处理我的数据,如下所示:
LOOP1(第一行)命令 cval、tval、dval、mval、kval
LOOP2(用于第二行)命令 cval、tval、dval、mval、kval
LOOP3(用于第三行)命令 cval、tval、dval、mval、kval
...等等,等等,循环配置文件中的每一行。
鉴于此文件:
$ 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
Run Code Online (Sandbox Code Playgroud)
并给出了这个脚本:
#!/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
Run Code Online (Sandbox Code Playgroud)
我们得到这样的结果:
$ ./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
Run Code Online (Sandbox Code Playgroud)
替换echo为您的专有命令,您应该已准备就绪。