为什么 grep 不能与 iostat 一起工作?

为什么 grep 不能与 iostat 一起工作?

我正在尝试收集一些指定的磁盘使用情况统计信息这里,用于 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匹敌的。)

相关内容