简短版本:
有没有更好的方法来编写下面的支票?
./check_snmp -H x.x.x.x -o oidstring -C public | awk '{print $4}' | sed 's/.$/.&/' | sed -e 's/$/ KB/'
长版:
我有一个Nagios服务检查,输出一个三位数字:
./check_snmp -H x.x.x.x -o oidstring -C public
SNMP OK - 711 | iso.oidstring=711
这就是我根据自己的喜好格式化它并提供准确的值:
./check_snmp -H x.x.x.x -o oidstring -C public | awk '{print $4}' | sed 's/.$/.&/' | sed -e 's/$/ KB/'
71.1 KB
输出是完美的,我可以在CentOS环境中运行命令而不会出现问题,但是当尝试在Nagios中实现检查时,服务不返回和值,而是我得到(stdout没有输出)。
奇怪的是,我甚至可以在Nagios中成功执行服务测试检查,但是显示主机和服务值的页面是给出(在stdout上没有输出)的页面。
我认为Nagios不喜欢我尝试格式化输出的方式,至少在网络方面是这样。
上面的支票是否有'整洁'的方式?
提前致谢。
答案 0 :(得分:2)
您可以使用单个sed(使用短划线作为锚点)来执行此操作:
... | sed 's/^.*- \([0-9]*\)\([0-9]\) .*$/\1.\2 KB/'
或单个awk:
... | awk '{printf "%s KB\n", $4/10}'
答案 1 :(得分:0)
我的Icinga向我显示了一个空白。
$USER1$/check_snmp -H $HOSTADDRESS$ -C SNMP -o .1.3.6.1.2.1.33.1.2.5.0 $ARG1$ | awk '{printf "%s V\n", $4/10}'
当我手动执行此操作时,我有正确的输出:80.2V