我尝试使用以下代码从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}}切换它仍然将其作为文件获取。
答案 0 :(得分:3)
我想到了两个选择
将st输出作为stdin传递给awk:
set n [exec ping 8.8.8.8 -c 2]
exec awk {NR>=2 && NR<=4 { print }} << $n
# ..................................^^
不要担心临时变量
exec ping 8.8.8.8 -c 2 | awk {NR>=2 && NR<=4 { print }}
你不想要大括号内的双引号:大括号用于引用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]