我正在尝试收集一些指定的磁盘使用情况统计信息这里,用于这 nagios 插件
简而言之,它应该在来自 iostat 的输出中获取第二个讲座的 tps,如下所示:
/usr/bin/iostat -d /dev/vda -t 1 | grep -n vda | grep 9:vda | awk -F" " '{print $2;}'
问题是第二个grep
不会收集任何东西。
我尝试了类似的东西find
,它做了同样的事情,而且似乎有效
find | grep -n ./home | grep 9:./home
重现该问题的命令的较短版本如下
iostat -d /dev/vda -t 1 | grep -n vda | grep 9:vda
我正在运行带有 grep 2.25 的 Ubuntu 16.04
$ grep --version
grep (GNU grep) 2.25
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
答案1
艾尔文·朗给出了原因第二个 grep 没有快速输出任何内容也就是说,如果您只想要第二个匹配项,您可以grep
在第二个匹配项之后退出 ( -m2
) 并采取最后一行:
$ iostat -d /dev/vda -t 1 | grep -n vda -m2 | awk 'END {print $2}'
19.00
甚至可以在 awk 中完成整个操作(匹配和计数):
iostat -d /dev/vda -t 1 | awk '/vda/ && ++count == 2 {print $2; exit}'
(该find
命令可能工作得更好,因为它填充 grep 缓冲区的速度比 iostat 快得多。其输出的绝对数量find
是无法iostat
匹敌的。)