AWK 不接受带有错误 awk 的 TCL 结果:无法打开文件
AWK doesn't accept TCL results with error awk: can't open file
我正在尝试使用以下代码从 AWK
中的 TCL
获取 ping 结果:
set n [exec ping 8.8.8.8 -c 2]
exec awk {"NR>=2 && NR<=4 { print }"} $n
但是我得到这个错误:
Error in startup script: awk: can't open file PING 8.8.8.8 ...
似乎 AWK
得到 $n
不是作为输入而是作为文件。
我找到了 但尽管看起来是同一个问题,但我遇到了不同的问题。我可以 运行 AWK
我的 TCL
。问题是它不接受 Input
作为我的来源,虽然我没有我们 -f
切换它仍然作为文件获取它。
想到了 2 个选择
将 ping 输出作为标准输入移交给 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]
我正在尝试使用以下代码从 AWK
中的 TCL
获取 ping 结果:
set n [exec ping 8.8.8.8 -c 2]
exec awk {"NR>=2 && NR<=4 { print }"} $n
但是我得到这个错误:
Error in startup script: awk: can't open file PING 8.8.8.8 ...
似乎 AWK
得到 $n
不是作为输入而是作为文件。
我找到了 AWK
我的 TCL
。问题是它不接受 Input
作为我的来源,虽然我没有我们 -f
切换它仍然作为文件获取它。
想到了 2 个选择
将 ping 输出作为标准输入移交给 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]