AWK exec命令中的TCL全局变量

AWK exec命令中的TCL全局变量,awk,tcl,tk,Awk,Tcl,Tk,我想在tcl中执行以下awk脚本(运行良好): 但问题是“文本”是从TK条目小部件提交的,我必须将其放入一个变量($var),awk无法识别该变量: set var [.entry get] exec awk {$1==$var {print $0}} temp1.txt > temp2.txt} 你知道如何跳过它或者让它运行吗 PS我想留在awk,如果可能的话,不想更改tcl上的代码 问候,, lucas使用awk中的-v开关将外部变量传递给awk: exec awk -v var=$

我想在tcl中执行以下awk脚本(运行良好):

但问题是“文本”是从TK条目小部件提交的,我必须将其放入一个变量($var),awk无法识别该变量:

set var [.entry get]
exec awk {$1==$var {print $0}} temp1.txt > temp2.txt}
你知道如何跳过它或者让它运行吗

PS我想留在awk,如果可能的话,不想更改tcl上的代码

问候,,
lucas

使用awk中的
-v
开关将外部变量传递给awk:

exec awk -v var=$var {$1==var {print $0}} temp1.txt > temp2.txt}

使用awk中的
-v
开关将外部变量传递给awk:

exec awk -v var=$var {$1==var {print $0}} temp1.txt > temp2.txt}

我已经有20多年没有使用AWK了:您不需要在==表达式的第二个操作数周围加引号吗?而且,在您的示例中大括号是不平衡的:您的意思是
exec AWK{$1==$var{print$0}}temp1.txt>temp2.txt
?噢!没有注意到你的第一个例子。看来引用毕竟是必要的。请看下面我的答案。是的,连帽衫,你是对的,不需要末端支架。这只是复制/粘贴错误。关于引号,我认为tcl不会认识到它们。我已经有20年没有使用AWK了:您不需要在==表达式的第二个操作数周围加引号吗?另外,在您的示例中大括号是不平衡的:您的意思是
exec AWK{$1==$var{print$0}}temp1.txt>temp2.txt
?噢!没有注意到你的第一个例子。看来引用毕竟是必要的。请看下面我的答案。是的,连帽衫,你是对的,不需要末端支架。这只是复制/粘贴错误。关于引用,我认为tcl不会识别它们,因为它们很优雅,并且可以很好地处理任何非二进制、非机密值。(密码/密钥很糟糕,但通常情况下都是这样,二进制数据最好用其他工具处理…)没错,awk在任何情况下都无法对二进制数据进行任何严格的比较。这很优雅,并且适用于任何非二进制、非机密值。(密码/密钥很糟糕,但无论如何通常都是这样,二进制数据最好用其他工具处理…)没错,awk在任何情况下都无法对二进制数据进行任何strig比较。