我在Expect脚本中使用以下awk命令来获取特定目标的网关
route | grep $dest | awk '{print $2}'
但是,期望脚本不喜欢上面的语句中的$ 2。
有人知道awk的替代品来执行与上述相同的功能吗?即。输出第二列。
您可以使用剪切:
route | grep $dest | cut -d \ -f 2
使用空格作为字段定界符并拉出第二个字段
要回答您的Expect问题,单引号对Tcl解析器没有特殊含义。您需要使用花括号来保护awk脚本的正文:
route | grep $dest | awk {{print $2}}
而且awk可以完成grep的工作,因此您可以省去一个更少的过程:
route | awk -v d=$dest {$0 ~ d {print $2}}
切换到另一个实用程序之前,请检查是否更改了字段分隔符。 GNU Awk here中字段分隔符的文档。
SED是最好的替代选择。如果您不介意依赖项,那么Perl也应该足以解决任务]
根据数据的结构,您可以使用剪切或使用sed来过滤和打印第二列。
或者,您可以使用Perl:
perl -ne 'if(/foo/) { @_ = split(/:/); print $_[1]; }'
这将打印每行包含foo
的第二个令牌,并以:
作为令牌分隔符。