解析'w'命令的输出?

时间:2011-03-06 15:24:36

标签: c parsing command-line

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

这是一项大学任务,我需要使用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,如果有帮助的话)。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

另一个可能的理论(听起来它违背了作业,但我会记住它)是抓住w的源代码并将其破解,只是通过函数调用告诉你信息。如果你感觉真的很铁杆,你可以学习所有的库api调用,并直接这样做。

答案 2 :(得分:0)

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

w -u -s -f | grep load | cut -d“” - f 11

w -u -s -f | grep tty | cut -d“” - f 13

第一个接受w的输出,使用grep只选择带有加载的行,然后切除除第11个数据块(分隔符是空格)之外的所有内容,这是第一个带逗号的加载号。 / p>

第二个做类似的事情,仅针对用户负载。如果有多个负载,则为一个列表。

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