犯错的同胞们,
我正在玩我在 RHEL 5.4 盒子上开发的一个衬里,我让它完美地工作:
TOTAL_RAM=`free | grep Mem: | awk '{ print $2 }'`; \
ps axo rss,comm,pid | awk -v total_ram=$TOTAL_RAM \
'{ proc_list[$2] += $1; } END { for (proc in proc_list) \
{ proc_pct = (proc_list[proc]/total_ram)*100;
printf("%d\t%s\t%0.2f%\n", proc_list[proc],proc,proc_pct); }}' \
| sort -n | tail -n 10
在我的 RHEL 盒子上输出如下内容:
3736 logmon 0.01%
4156 EvMgrC 0.01%
4692 hald 0.01%
5020 ntpd 0.02%
6252 sshd 0.02%
7784 cvd 0.02%
9224 snmpd 0.03%
13068 dsm_sa_datamgr3 0.04%
23320 dsm_om_connsvc3 0.07%
4249864 mysqld 12.90%
然而,在我的 Ubuntu 9.04 切片上,我得到了这个:
awk: run time error: not enough arguments passed to printf("%d %s %0.2f%
")
FILENAME="-" FNR=104 NR=104
33248 console-kit-dae 3.17
我认为它必须是 bash 的东西,但我真的没有做任何应该是特定于bash 的事情。RHEL 盒子正在运行:
# yum info bash | grep -e Version -e Release
Version : 3.2
Release : 24.el5
和 Ubuntu 盒子:
# apt-cache show bash | grep -e Version
Version: 3.2-5ubuntu1
我还没有深入研究这个超级问题,我想我会联系我的约翰尼同伴,看看你以前是否遇到过这个问题。
/弓
此命令在每个系统上显示什么:
并且由于错误消息是由 产生的
awk
,这说明了什么:除了chris建议转义 the 中的最后一个 %
printf
(可以使用反斜杠或将百分号加倍来完成)之外,在printf
.我只能说,它在我的 Ubuntu 9.10 上运行良好。但是你的第四个
%
标志对我来说有点奇怪 - 好像它依赖于一些不完全指定的行为。不应该逃避吗?如果您只是在寻找内存百分比,您可以执行以下操作:
top -b -n1
你会得到一些额外的信息,但更容易发现。Top 允许使用批处理模式,这样所有的 curses junk 都不会通过管道传输到其他应用程序。