免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4539 | 回复: 24
打印 上一主题 下一主题

字串分割问题,请大家帮忙谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-22 14:12 |只看该作者 |倒序浏览
12可用积分
1.我想查询占用CPU最多的10个进程的信息,包括下面的参数,但我查了下vsz好像只是表示虚拟内存,请问,哪个参数表示的是占用的实际的物理内存
ps -eo,pid,pcpu,user,vsz,args  | sort +1rn

以下是查询的结果
29611  0.0      bes 3664 /opt/BES/bin/osagent -p 28004 +l oef -d /opt/BES/var/domains/base/configuration
29658  0.0      bes 4032 /opt/BES/bin/osagent -p 42420 -a ln-bes2 -d /opt/BES/var/domains/base/adm/logs
29761  0.0      prm 215352 CostMgnt_svr -m CostMgnt -i ../config/CostMgnt.cfg
29979  0.0      prm 41224 checkmgnt_svr -m checkmgnt -i ../config/checkmgnt.cfg
我想对结果这样处理,对这些参数用'|'分隔符连接起来,形成pid|pcpu|user|vsz|args
(如果有可显示物理内存的参数,最好替换掉vsz)
注:查询结果中由于args 一项,所以只用替换空格的方式做不到
想要下面的结果:
29611|0.0|bes|3664 |/opt/BES/bin/osagent -p 28004 +l oef -d /opt/BES/var/domains/base/configuration

2.能否再以内存占用率为条件,查询出占用内存最多的10个进程的信息?

谢谢各位大侠。

最佳答案

查看完整内容

这个显示的是实际占用的物理内存rsz我不知道AIX风格的format中用哪个字符来表示rsz,所以用awk来进行分隔符的转换了ps本身就支持排序[ 本帖最后由 springwind426 于 2008-8-22 15:12 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-08-22 14:12 |只看该作者

  1. ps -eo ppid,pcpu,user,rsz,args --sort=-rsz | head|awk '{for(i=1;i<=4;i++)$i=$i"|";print}'
复制代码


这个显示的是实际占用的物理内存rsz

我不知道AIX风格的format中用哪个字符来表示rsz,所以用awk来进行分隔符的转换了

ps本身就支持排序

[ 本帖最后由 springwind426 于 2008-8-22 15:12 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-08-22 14:21 |只看该作者
原帖由 sea_soft 于 2008-8-22 14:12 发表
1.我想查询占用CPU最多的10个进程的信息,包括下面的参数,但我查了下vsz好像只是表示虚拟内存,请问,哪个参数表示的是占用的实际的物理内存
ps -eo,pid,pcpu,user,vsz,args  | sort +1rn

以下是查询的结果 ...

问题1其实很简单,最后一个参数args 才带空格,其他参数不会有空格,用sed 执行4次空格替换即可
ps -eo,pid,pcpu,user,vsz,args  | sort +1rn |sed -e 's/[ ]+/|/;s/[ ]+/|/;s/[ ]+/|/;s/[ ]+/|/'

[ 本帖最后由 jinl 于 2008-8-22 14:23 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-08-22 14:36 |只看该作者
原帖由 jinl 于 2008-8-22 14:21 发表

问题1其实很简单,最后一个参数args 才带空格,其他参数不会有空格,用sed 执行4次空格替换即可
ps -eo,pid,pcpu,user,vsz,args  | sort +1rn |sed -e 's/[ ]+/|/;s/[ ]+/|/;s/[ ]+/|/;s/[ ]+/|/'

ps -eo,pid,pcpu,user,vsz,args  | sort +1rn | awk 'NR<11{$1=$1;print}' |sed -e 's/[ ]+/|/;s/[ ]+/|/;s/[ ]+/|/;s/[ ]+/|/'
是这样吗,我执行了下,结果是这样的:
10566 1.1 cbossrsp 406696 java -DStoreSend105=StoreSend105 -Dfile.encoding=GBK -Xms256m -Xmx256m -classpa
22909 1.1 cbossrsp 410176 java -DStoreSend-104=StoreSend-104 -Dfile.encoding=GBK -Xms256m -Xmx256m -class
126 0.4 root 5216 /usr/sbin/nscd
3 0.3 root 0 fsflush
29474 0.2 bes 233808 scu
1 0.1 root 2400 /sbin/init
841 0.1 bes 200216 /opt/BES/bin/partition -Dpartition.ignore_shutdown_on_signal=true -Dpartition.m
867 0.1 bes 210320 /opt/BES/bin/partition -Dpartition.ignore_shutdown_on_signal=true -Dpartition.m
879 0.1 bes 224840 /opt/BES/bin/partition -Dpartition.ignore_shutdown_on_signal=true -Dpartition.m
1045 0.1 bes 241360 /opt/BES/bin/partition -Dpartition.ignore_shutdown_on_signal=true -Dpartition.m

pid,pcpu,user,vsz这几项之间没有用|分割开,还请大侠帮忙,谢谢

论坛徽章:
0
5 [报告]
发表于 2008-08-22 14:45 |只看该作者
问题2也很简单,
排序后使用head就好了:
ps -eo,pid,pcpu,user,vsz,args  | sort -k4n -r | head | sed -e 's/[ ]\+/|/;s/[ ]\+/|/;s/[ ]\+/|/;s/[ ]\+/|/'

[ 本帖最后由 welcome008 于 2008-8-22 14:57 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-08-22 14:50 |只看该作者

  1. ps -eo "%P|%C|%U|%z|%a" | sort -t'|' -k4,4nr|head -10
复制代码


解释:
-o "%P|%C|%U|%z|%a"  显示ppid,pcpu,user,vsz,args,中间用|分隔
sort -t '|' -k4,4nr 以vsz逆排序,以数值方式排序
head -10 只显示前10个

论坛徽章:
0
7 [报告]
发表于 2008-08-22 14:58 |只看该作者
原帖由 springwind426 于 2008-8-22 14:50 发表

ps -eo "%P|%C|%U|%z|%a" | sort -t'|' -k4,4nr|head -10


解释:
-o "%P|%C|%U|%z|%a"  显示ppid,pcpu,user,vsz,args,中间用|分隔
sort -t '|' -k4,4nr 以vsz逆排序,以数值方式排序
head -10 只显示 ...


不用 -10了,默认是前面10行

论坛徽章:
0
8 [报告]
发表于 2008-08-22 15:08 |只看该作者
原帖由 welcome008 于 2008-8-22 14:45 发表
问题2也很简单,
排序后使用head就好了:
ps -eo,pid,pcpu,user,vsz,args  | sort -k4n -r | head | sed -e 's/[ ]\+/|/;s/[ ]\+/|/;s/[ ]\+/|/;s/[ ]\+/|/'

显示结果:
  PID %CPU     USER  VSZ COMMAND
    3  0.3     root    0 fsflush
    2  0.0     root    0 pageout
    0  0.0     root    0 sched
23061  0.0     obyj 1200 grep emproductintf_svr
  302  0.0     root 1232 /usr/lib/efcode/sparcv9/efdaemon
29037  0.0     root 1264 /bin/sh /lib/svc/method/rpc-ttdbserverd
23043  0.0    aiocs 1272 head
17533  0.0 cbossrsp 1280 tail -f CbossReponseSvr.log.080822
  363  0.0     root 1280 /usr/lib/utmpd
如果不想要
  PID %CPU     USER  VSZ COMMAND
这一行,该怎么做谢谢,还有,这些结果没有用|连接起来(COMMAND内也有空格,所以不能把所有空格都替换)

[ 本帖最后由 sea_soft 于 2008-8-22 15:10 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2008-08-22 15:14 |只看该作者
原帖由 springwind426 于 2008-8-22 15:05 发表

ps -eo ppid,pcpu,user,rsz,args --sort=-rsz | head|awk '{for(i=1;i

我用的是Soalaris,执行时提示参数不对,不支持rsz,不过已经帮我了个大忙了,解决了|连接符的问题,多谢哈

论坛徽章:
0
10 [报告]
发表于 2008-08-22 15:16 |只看该作者
原帖由 sea_soft 于 2008-8-22 15:08 发表

显示结果:
  PID %CPU     USER  VSZ COMMAND
    3  0.3     root    0 fsflush
    2  0.0     root    0 pageout
    0  0.0     root    0 sched
23061  0.0     obyj 1200 grep emproductintf_svr ...



ps 加 h 参数就不输出报表头

比如

  1. ps h -eo ppid,pcpu,user,rsz,args
复制代码


man 一下ps ,里面有很多参数
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP