parsing - 解析 vmstat 输出的有效方法

标签 parsing procps

我正在尝试有效地解析 vmstat 输出,最好在 awk 或 sed 中,它也应该在 Linux 和 hp-ux 上工作。例如,我想从以下输出中减少 cpu 空闲百分比(在本例中为“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

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

最佳答案

使用 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 上进行了测试。

关于parsing - 解析 vmstat 输出的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7346675/

相关文章:

android - 从 2016 年 4 月 18 日开始在 android 中解析日期格式 10 :41 AM to 04/18/2016 10:41

python - 解析 DTD 以揭示元素的层次结构

linux - 如何使用 procps-3.2.8 列出所有正在运行的进程?

linux - 向 Yocto 生成的自定义 Linux 镜像添加新内核参数

parsing - parsec 使用 between 来解析括号

VBA HTML 抓取 - 来自复杂表的 '.innertext'

java - 从字符串(使用 Scanne.next() 从文件中获取)中修剪/删除不需要的简单值,以使用 Double.parseDouble() 解析 double

regex - pgrep 多个进程名称

linux - 不同进程的 %cpu 通过 busybox 和 procps-ng 的 top 输出