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