Почему grep не работающий с iostat?

Я пытаюсь собрать некоторые статистические данные использования диска, как указано здесь для использования с этим nagios плагином

Короче говоря это должно получить tps для второй лекции в выводе, прибывающем из iostat как это:

/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

Я запускаю Ubuntu 16.04 с grep 2.25

$ 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>.
0
задан 21 November 2018 в 22:05

1 ответ

Alvin Lang привел причину, почему второй 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 может надеяться соответствовать.)

3
ответ дан 27 October 2019 в 02:32

Другие вопросы по тегам:

Похожие вопросы: