我正在尝试获取我的计算机上每个用户的当前运行进程数,但我想在没有管道命令的情况下执行此操作以获得相同的输出。
我试过这个并且它可以工作,但我想使用/ 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
有人可以帮我解决这个问题吗?
答案 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
进行测试时,我得到了理智 - 或者至少是可解释的 - 输出。