我正在用 ksh 编写脚本。我需要找到所有拥有超过 N 个进程的用户并在 shell 中回显它们。 N 是从 ksh 读取的。
我知道我应该使用ps -elf
,但是如何解析它,找到具有 >N 个进程的用户,并用它们创建一个数组?我在 ksh 中的数组方面遇到了一些问题。也许一个简单的解决方案可以帮助我,而不必创建一个数组。有一个人推荐我使用
ps -elf | awk '{a[$3]++;}END{for(i in a)if (a[i]>N)print i, a[i];}' N=3
但它不能正常工作。
答案1
您应该将输出的列减少ps
到最少,即此处仅请求用户名 - 这可以简化进一步的处理。
例如:
$ ps -eo user=
将打印所有当前正在运行的进程的所有者(=
抑制标题)。
获取每个用户计数的简单方法:
$ ps -eo user= | sort | uniq -c
1 dovecot
1 messagebus
1 mpd
1 polkitd
2 postfix
121 root
27 me
然后您可以根据需要进行过滤:
$ ps -eo user= | sort | uniq -c | awk '$1 > 42 {print $2}'
root
变量有限制:
$ N=42
$ ps -eo user= | sort | uniq -c | awk -v limit="$N" '$1 > limit {print $2}'
root