【问题标题】:parsing the output of the 'w' command?解析'w'命令的输出?
【发布时间】:2011-03-06 15:24:36
【问题描述】:

我正在编写一个程序,它需要了解系统上的当前负载以及任何用户的活动(它是一个负载平衡器)。

这是一个大学作业,我需要使用w 命令。我很难解析这个命令,因为它非常冗长。任何关于我能做什么的建议将不胜感激。这是程序的一小部分,我可以随意使用我喜欢的任何方法。

仍然包含我需要的信息的 w 的最精简版本是 `w -u -s -f',它产生了这个:

 10:13:43 up  9:57,  2 users,  load average: 0.00, 0.00, 0.00
 USER     TTY         IDLE WHAT
 fsm      tty7      22:44m x-session-manager
 fsm      pts/0      0.00s w -u -s -f

因此,我对平均负载后的第一个数字和最小的空闲时间感兴趣(所以我需要全部解析它们)。

我的后台进程将调用 w,因此 w 是最低空闲时间这一事实并不重要(我将看到的只是 tty 时间)。

你有什么想法吗?

谢谢

(如果有帮助,我可以使用其他 unix 命令,例如 grep)。

【问题讨论】:

    标签: c parsing command-line


    【解决方案1】:

    你可以使用其他 Unix 命令吗?您可以使用grepsedhead/tail 来获取您需要的行,并使用cut 根据需要将它们拆分。

    【讨论】:

    • 我可以,当然。你能举个例子吗?
    【解决方案2】:

    另一种可能的理论(听起来好像与分配不符,但我会记住这一点)是去获取 w 的源代码并将其破解,以便通过函数调用告诉您信息。如果你感觉很硬核,你可以学习所有库 api 调用并直接这样做。

    【讨论】:

      【解决方案3】:

      我发现我可以使用这样的命令组合:

      w -u -s -f | grep 加载 |剪切 -d " " -f 11

      w -u -s -f | grep tty |剪切 -d " " -f 13

      第一个取w的输出,用grep只选择有load的那一行,然后删掉除了第11块数据(分隔符是空格)以外的所有数据,它是第一个带逗号的load号。

      第二个做类似的事情,只是为了用户负载。如果有多个负载,它是一个列表。

      这很容易解析,除非有人反对或建议改进它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-25
        • 2014-01-14
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多