5

我想在 TCL 脚本中打印文件中的特定列号字段。

我尝试使用exec awk '{print $4}' foowhere foo is filename,但它不起作用,因为它给出了错误

can't read "4": no such variable

如何在 tcl 脚本中执行 awk 以上操作?

谢谢,

4

1 回答 1

14

问题是单引号在 Tcl 中没有特殊含义,它们只是字符串中的普通字符。因此$4tcl 没有隐藏它,它试图扩展变量。

与 shell 单引号等效的 Tcl 是大括号。这就是你需要的:

exec awk {{print $4}} foo

双大括号看起来很有趣,但是外面的一对是给 Tcl 的,里面的一对是给 awk 的。

顺便说一句,那个 awk 程序的 Tcl 翻译是:

set fid [open foo r]
while {[gets $fid line] != -1} {
    set fields [regexp -all -inline {\S+} $line]
    puts [lindex $fields 3]
}
close $fid
于 2013-06-07T18:02:39.683 回答