我想从tcl脚本执行awk命令

我想从tcl脚本执行awk命令,awk,tcl,Awk,Tcl,我想从我的tcl脚本中执行以下命令 exec /bin/awk '/Start/{f=1;++file}/END/{f=0}f{print > "/home/user/report/"file }' input 我犯了这个错误 awk: ^ invalid char ''' in expression 可以从tcl执行这样的命令吗 谢谢引用tcl手册: 从Unix shell调用转换命令时,应小心 接受单引号字符没有特殊字符这一事实 对Tcl的意义。因此: awk'{sum+=$1}结

我想从我的tcl脚本中执行以下命令

exec /bin/awk '/Start/{f=1;++file}/END/{f=0}f{print > "/home/user/report/"file }' input
我犯了这个错误

awk: ^ invalid char ''' in expression
可以从tcl执行这样的命令吗


谢谢

引用tcl手册:

从Unix shell调用转换命令时,应小心 接受单引号字符没有特殊字符这一事实 对Tcl的意义。因此:

awk'{sum+=$1}结束{print sum}数字。列表

将被翻译成如下内容:

exec awk{{sum+=$1}END{print sum}}编号。列表

所以我会尝试不加引号(作为答案发布,因为它不能恰当地放在评论中,这只是在谷歌上快速搜索的一个想法)

根据注释,您可以在var中创建awk脚本,然后执行以下操作:

set awk_command "/Start/{f=1;++file}/END/{f=0}f{print > \"$tcl_variable\"file }" 
exec /bin/awk $awk_command input
以下是我的解决方案:

puts [exec /usr/bin/awk \
           {/Start/{f=1;++file}END{f=0}f{print > file}} \
           invoke_awk.txt]
如果不需要显示输出:

exec /usr/bin/awk \
     {/Start/{f=1;++file}END{f=0}f{print > file}} \
     invoke_awk.txt

请注意,在TCL中,您不使用单引号分组,而是使用双引号或大括号。

这可能是一个引号问题,但我的TCL太生疏了,无法提供太多帮助。尽管我怀疑会涉及到
{}
引用。用
{
}
替换外部单引号有帮助吗?谢谢你的回复,实际上,我不能用{和}替换单引号,因为“/home/user/report/”,我把它作为一个变量。@aachraf显示你的代码,我们怎么猜得到?堆栈溢出是关于帮助修复代码,而不是占卜:)我不能用{和}替换单引号,因为“/home/user/report/”是一个变量。下面是我在exec/bin/awk'/Start/{f=1;++file}/END/{f=0}f{print>“$tcl_variable”file}”中输入的内容更新了我的答案(花了一些时间测试,因为我的tcl-fu已经生锈了,因为我有一段时间没有在鸡蛋花上做任何事情了:p)我会使用awk的
-v
选项来传递tcl变量:
设置awk\u-body{/Start/{f=1;+f=0;{{print>prefix file};exec awk-v prefix=$tcl_variable$awk_body input
在这种情况下,您可以保留一行,vars的想法是能够在exec之前打印以供参考。感谢您的回答,如果命令中没有tcl变量,但我有f{print>$tcl_variable file},您的解决方案就可以工作