繁体   English   中英

如何从awk命令启动shell脚本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM