如何从awk命令启动shell脚本

时间:2016-01-28 10:55:58

标签: shell awk

我是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解决我的任务更好的方法。

2 个答案:

答案 0 :(得分:0)

这可能有效:

echo $(
while IFS=\\` read p sc
do
  $sc $p
done < data.txt )

shell循环拆分文件中的行并使用每个参数运行每个脚本。 echo $()用于运行循环并收集其输出,并回显它,这具有删除换行符的效果。

答案 1 :(得分:0)

这对我有用:

$ nawk -F\` '{ printf("%s ",$1); system("eval "$2) }' /tmp/data.txt

它产生:

P1 v1
P2 v2
P3 v3