在没有管道的awk之后使用ps

时间:2015-02-17 07:21:59

标签: linux bash awk ps

我正在尝试获取我的计算机上每个用户的当前运行进程数,但我想在没有管道命令的情况下执行此操作以获得相同的输出。

我试过这个并且它可以工作,但我想使用/ bin / ps这样的东西不起作用。

ps aux --noheader | awk '{count[$1]++}END{for (n in count) print count[n], n}'

上述命令的输出为:

1 polkitd 
1 bus
2 avahi
89 root

我一直在尝试这个:

awk ‘{count[$1]++}END{for (n in count) print count[n], n}’ /bin/ps

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您可以使用getline使用信息填充变量,例如

 awk ' BEGIN {"who|wc -l"|getline users;print "Users logged on: " users}'
 Users logged on: 2

答案 1 :(得分:1)

如果要避免使用显式管道符号,可以使用process substitution

awk '{count[$1]++}END{for (n in count) print count[n], n}' <(ps -aux --noheader)

或使用awk&#39; s getline

awk 'BEGIN { while ("ps -aux --noheader" | getline) proc[$1]++
             for (user in proc) print user, proc[user] }'

ps的选项不可移植;例如,他们在Mac OS X上根本不工作,但是当我使用-ef而不是-aux --noheader进行测试时,我得到了理智 - 或者至少是可解释的 - 输出。