1

我需要在 Tcl 脚本中使用 awk 命令。我有一个如下文件。我们称之为giri.txt

1  what
2  Why
3  When
4  who

我写了以下代码,认为它会像这样打印:

what did
why did
when did
who did

set a did
exec cat giri.txt | awk {{ print $2 " " $a }}

但它打印出来是这样的:

what what
why why
when when
who who

谁能解释一下为什么会这样打印?任何人都可以建议一种在 awk 中使用 Tcl 变量的方法吗?

4

2 回答 2

1

您可能可以在不调用 awk 的情况下解决所有 tcl 问题,但如果您真的想这样做:

set a did
exec awk "{print \$2, a}" a=$a < giri.txt

如果您对如何扩展命令有疑问,请用 echo 替换 exec 并检查结果

echo awk "{print \$2, a}" a=$a
于 2013-07-24T05:30:19.237 回答
0

不使用 awk 进行操作:

set a "did"
set stream [open "giri.txt"]
while {[gets $stream line] >= 0} {
  puts "$line $a"
}
close $stream

使用可重复使用的程序会更好:

proc forEachLine {file args} {
  set stream [open $file]
  while {[gets $stream line] >= 0} {
    {*}$args $line
  }
  close $stream
}

set a "did"
forEachLine "giri.txt" apply {{line} {
  global a
  puts "$line $a"
}}
于 2013-07-25T00:58:28.433 回答