【发布时间】:2014-11-25 23:50:54
【问题描述】:
正如标题所说,我正在尝试制作一个 bash 脚本,该脚本获取系统上每个唯一进程的所有者,并计算该用户拥有的进程总数以及该用户拥有的所有进程的内存总和。我知道ps aux 显示了我需要的所有信息,但是我如何获取每个唯一所有者并将其存储在一个变量中,以便我可以获得每个用户所需的信息?
我正在考虑使用awk 来获取第一列(用户名)并将用户名存储在array 中。我会使用if 语句来检查用户名是否已经在数组中,如果没有,则添加它。除了我不知道如何在 bash shell 中使用数组,而且这种方法似乎不是一种有效的方法。有谁知道这样做的更有效的方法?
样本输出
owner
Num Procs: 2, Mem: 3100, Curr CPU: 0
Hog: 00:00:00 sshd: owner@pts/16
root
Num Procs: 71, Mem: 52644, Curr CPU: 0
Hog: 01:33:41 /usr/bin/X :0 -br -audit 0 -auth /var/lib/gdm/:0.Xauth -nolisten tcp vt7
【问题讨论】:
-
显示将产生该示例输出的示例输入,以便我们帮助您编写脚本来处理该示例输入。
-
我没有示例输入,我必须创建作为脚本的输入。
-
没有。所需的脚本是将输入转换为输出的工具。脚本的输入是
ps aux的输出或您正在运行的任何其他命令产生的任何内容。您已经从脚本中显示了所需的输出,现在只需发布脚本将收到的输入以生成该输出。 -
但这就是问题所在,我不知道输入应该是什么,我只知道 ps aux 显示我需要的所有内容,并使用 awk 获取每一列。但从那里,我迷路了。
-
好的,所以运行
ps aux并捕获它的输出。这是 awk 脚本的示例输入。现在手动编辑该ps aux输出的副本,使其看起来像您希望 awk 脚本输出的样子。这是脚本的示例输出。将它们都发布,我们可以为您提供帮助。如果ps aux输出长度为 1,000 行,那么显然将其修剪为一些合理数量的相关行,例如10个左右。