эффективный способ разбора вывода vmstat - PullRequest
2 голосов
/ 08 сентября 2011

Я пытаюсь эффективно проанализировать вывод vmstat, предпочтительно в awk или sed, он также должен работать как на linux, так и на hp-ux. Например, я хотел бы вырезать процессор idle% (в данном случае «92») из следующего вывода:

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
11  0 385372 101696  61704 650716    0    1     5     9    6   12  5  2 92  0

к сожалению, выходные данные vmstat могут отличаться для разных дистрибутивов Linux и hp-ux, также столбцы могут различаться по длине и могут быть представлены в другом порядке.

Я пытался написать хороший awk oneliner, но в итоге закончил с решением на python:

$ vmstat | python -c 'import sys; print dict(zip(*map(str.split, sys.stdin)[-2:])).get("id")'
92

Знаете ли вы лучший способ разобрать упомянутые выходные данные, чтобы получить числовые значения нужного имени столбца?

Ответы [ 2 ]

4 голосов
/ 08 сентября 2011

используя awk вы можете сделать:

vmstat | awk '(NR==2){for(i=1;i<=NF;i++)if($i=="id"){getline; print $i}}'

Это должно получить значение столбца "id" в Linux, а также в HP-UX или любой другой стандартной системе Unix.

Проверено на Linux, HP-UX и Solaris.

0 голосов
/ 03 июля 2015
$ vmstat | python -c 'import sys; print sys.stdin.readlines()[-1].split()[-2]'
95
...