【问题标题】:efficient way to parse vmstat output解析 vmstat 输出的有效方法
【发布时间】:2011-09-08 10:36:35
【问题描述】:

我正在尝试有效地解析 vmstat 输出,最好是在 awk 或 sed 中,它也应该适用于 linux 和 hp-ux。例如,我想从以下输出中删除 cpu 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

您知道解析上述输出以获取所需列名的数值的更好方法吗?

【问题讨论】:

  • python oneliners 不如 perl 中的东西那么吸引人 :-)

标签: parsing procps


【解决方案1】:

使用 awk 你可以做到:

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

这应该在 Linux 以及 HP-UX 或任何其他标准 unix 系统上获得“id”列的值。

在 Linux、HP-UX 和 Solaris 上测试。

【讨论】:

    【解决方案2】:
    $ vmstat | python -c 'import sys; print sys.stdin.readlines()[-1].split()[-2]'
    95
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 2010-10-11
      • 2015-05-25
      • 2011-08-22
      • 2018-12-31
      • 1970-01-01
      • 2018-06-29
      相关资源
      最近更新 更多