![](/img/trans.png)
[英]how to pass the filename as variable to a awk command from a shell script
[英]How to launch shell script from awk command
我是ksh脚本的新手,非常感谢您的帮助。 我需要解析看起来像这样的数据文件:
$ cat data.txt
P1`/tmp/s1.ksh
P2`/tmp/s2.ksh
P3`/tmp/s3.ksh
P1,P2,P3是参数名称,后跟脚本名称,这些脚本名称计算这些参数的值。
虚拟脚本如下所示:
$ cat s1.ksh
!/bin/ksh
echo "v1"
最后,我需要启动这些脚本并将它们的结果与参数名称连接起来,并生成一个类似于以下内容的字符串:
P1=v1 P2=v2 P3=v3
我尝试使用awk做到这一点。 据我了解,system()应该启动脚本并将其输出打印到结果字符串中。
$ awk -F\` '{ printf("%s ",$1); system("eval \"$(cat "$2")\"") }' /tmp/data.txt
但是它只打印参数名称
P1 P2 P3
我检查了是否正确解析了data.txt
$ awk -F\` '{ printf(" %s=",$1); printf("eval \"$(cat %s)\"", $2) }' /tmp/data.txt
输出是
P1=eval "$(cat /tmp/s1.ksh)" P2=eval "$(cat /tmp/s2.ksh)" P3=eval "$(cat /tmp/s3.ksh)"
因此,我希望system()应该执行以下命令,并将其输出与结果字符串连接起来。
$ eval "$(cat /tmp/s2.ksh)"
您能否帮助我,并解释为什么我没有从脚本中获取值v1,v2,v3。 也许有比使用awk解决我的任务更好的方法。
这可能起作用:
echo $(
while IFS=\\` read p sc
do
$sc $p
done < data.txt )
shell循环拆分文件中的行,并使用每个参数运行每个脚本。 echo $()用于运行循环并收集其输出,并对其进行回显,这具有删除换行符的作用。
这对我有用:
$ nawk -F\` '{ printf("%s ",$1); system("eval "$2) }' /tmp/data.txt
它产生:
P1 v1
P2 v2
P3 v3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.