Я хочу получить среднее время простоя сервера, используя mpstat. Проблема, с которой я столкнулся, заключается в том, что% idle находится не в тех же столбцах во всех версиях linux.

пример 1:

[root@testserver ~]# mpstat 1 2
Linux 2.6.32-358.el6.x86_64 (testserver)        06/18/2015      _x86_64_        (2 CPU)

12:41:17 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
12:41:18 AM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
12:41:19 AM  all    0.50    0.00    0.50    0.00    0.00    0.00    0.00    0.00   99.00
Average:     all    0.25    0.00    0.25    0.00    0.00    0.00    0.00    0.00   99.50

пример 2:

[root@testserver1 ~]# mpstat 1 2
Linux 2.6.18-308.8.2.el5 (testserver1)      06/17/2015

10:47:38 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
10:47:39 PM  all    0.12    0.00    0.00    0.00    0.00    0.00    0.00   99.88    191.09
10:47:40 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00    134.00
Average:     all    0.06    0.00    0.00    0.00    0.00    0.00    0.00   99.94    162.69

Я попробовал приведенную ниже команду в качестве обобщенного решения, но средний результат на один столбец меньше не подходит.

mpstat 1 2 | egrep -v '^Linux|^$' |  awk -v c="%idle" 'NR==1 {for (i=1; i<=NF; i++) if ($i==c) break}''{print $i}'

Я получаю ниже выхода.

[root@testserver ~]# mpstat 1 2 | egrep -v '^Linux|^$' |  awk -v c="%idle" 'NR==1 {for (i=1; i<=NF; i++) if ($i==c) break}''{print $i}'
%idle
100.00
100.00

Но желаемый результат

[root@testserver ~]# mpstat 1 2 | egrep -v '^Linux|^$' |  awk -v c="%idle" 'NR==1 {for (i=1; i<=NF; i++) if ($i==c) break}''{print $i}'
%idle
100.00
100.00
100.00

С наилучшими пожеланиями, KJ

1 ответ1

1

Ты можешь использовать:

awk '/%idle/ {for (i=1;i<=NF;i++) {if ($i=="%idle") col=i-1}}
     /^Average:/ {print $col}'

Здесь хранится столбец, в котором находится %idle , и вычитается единица, потому что в Average: отсутствует столбец PM/AM. Затем он печатает этот столбец, когда строка начинается с Average:

Тестовое задание

С sample1:

$ awk '/%idle/ {for (i=1;i<=NF;i++) {if ($i=="%idle") col=i-1}} /^Average:/ {print $col}' a
99.50

С sample2:

$ awk '/%idle/ {for (i=1;i<=NF;i++) {if ($i=="%idle") col=i-1}} /^Average:/ {print $col}' b
99.94

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .