AWK不接受错误awk的TCL结果:无法打开文件

时间:2017-12-03 15:59:10

标签: awk tcl quoting

我尝试使用以下代码从AWK set n [exec ping 8.8.8.8 -c 2] exec awk {"NR>=2 && NR<=4 { print }"} $n 获取ping结果:

Error in startup script: awk: can't open file PING 8.8.8.8 ...

但是我收到了这个错误:

AWK

似乎$n不会将AWK作为输入而是作为文件。 我找到了this但是虽然看起来是同一个问题,但我遇到了不同的问题。我可以在TCL内运行Input。问题是它不接受-f作为我的来源,虽然我没有{{1}}切换它仍然将其作为文件获取。

1 个答案:

答案 0 :(得分:3)

我想到了两个选择

  1. 将st输出作为stdin传递给awk:

    set n [exec ping 8.8.8.8 -c 2]
    exec awk {NR>=2 && NR<=4 { print }} << $n
    # ..................................^^
    

    https://tcl.tk/man/tcl8.6/TclCmd/exec.htm

  2. 不要担心临时变量

    exec ping 8.8.8.8 -c 2 | awk {NR>=2 && NR<=4 { print }}
    
  3. 你不想要大括号内的双引号:大括号用于引用awk主体,你不想将双引号传递给awk。

    另一个选择:因为你只想要ping输出的第2到第4行,使用Tcl,你根本不需要awk:

    set ping [exec ping 8.8.8.8 -c 2]
    set lines [lrange [split $ping \n] 1 3]
    puts [join $lines \n]
    

    或不可读

    puts [join [lrange [split [exec ping 8.8.8.8 -c 2] \n] 1 3] \n]