免费注册 查看新帖 |

Chinaunix

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

请各位高手帮我看看这段脚本的问题,谢谢啦! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-23 20:43 |只看该作者 |倒序浏览
  1. #!/usr/bin/ksh

  2. ps -ef|sort -k1n|awk '{print $1}'|grep -v UID|grep -v ^0|uniq>psnap.txt

  3. for i in `cat psnap.txt`
  4. do
  5.         ps -u $i|grep -v ps|grep -v ksh|grep -v CMD|awk '{print $5}'>tmp.txt
  6.         awk 'NF==1{a[$1]+=$1}END{for(i in a)print i,a[i]+1}' tmp.txt>ps$i_$1.txt
  7. done

  8. rm psnap.txt
  9. rm tmp.txt
复制代码
其中第8行的$i变量(指代某一个用户)虽然处在循环调度李,但是变量丢失了,怎么都不显示,似乎是受awk变量处理的影响,不太明白,盼热心高手给点拨一下,谢谢啦!

论坛徽章:
0
2 [报告]
发表于 2010-03-23 21:12 |只看该作者
tmp.txt>ps${i}_$1.txt

论坛徽章:
0
3 [报告]
发表于 2010-03-24 22:03 |只看该作者
谢谢LS指教,run了一下还有点问题,虽然$i的变量在文件名中显示了,但是后面还是跟了{i}字样,请问是什么原因。

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
4 [报告]
发表于 2010-03-24 22:15 |只看该作者
把最新的代码和执行的结果贴出来看看?

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
5 [报告]
发表于 2010-03-25 08:04 |只看该作者
看到这么多管道啊。楼主可以简化一下,比如第一个ps 命令
  1. ps -ef|sort -k1n|awk '{print $1}'|grep -v UID|grep -v ^0|uniq>psnap.txt
复制代码
改成:
  1. ps -ef|awk 'NR>1 {a[$1]++} END {for (i in a) print i}' >psnap.txt
复制代码

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
6 [报告]
发表于 2010-03-25 08:08 |只看该作者
ps -u $i|grep -v ps|grep -v ksh|grep -v CMD|awk '{print $5}'>tmp.txt

可以改成:

ps -u $i|awk '!(/ps/||/ksh/||CMD/) {print $5}'>tmp.txt

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
7 [报告]
发表于 2010-03-25 08:25 |只看该作者
感觉楼主的要求可以一条命令搞定的。但是不太清楚 ps -ef 和 ps -u 的输出格式。我用Solaris, 输出格式好像和楼主的不一样。

按照lz的思路改了这个脚本, 不需要产生临时文件。
  1. #!/usr/bin/ksh

  2. username=$(ps -ef|awk 'NR>1 {a[$1]++} END {for (i in a) print i}' )

  3. for user in ${username}
  4. do
  5.    ps -u $user |awk '!(/ps/||/ksh/||/CMD/) {a[$5]++} END {for (i in a) print i,a[i]}' > ps_$user.txt
  6. done
复制代码

论坛徽章:
0
8 [报告]
发表于 2010-03-25 10:29 |只看该作者
回复 7# rdcwayx


    $5输出的是什么,我用的是bash,看不到
  PID TTY          TIME CMD
1938 ?        00:00:00 gnome-keyring-d
1953 ?        00:00:00 gnome-session
2014 ?        00:00:06 ibus-daemon
2023 ?        00:00:00 ibus-gconf
2027 ?        00:00:14 python
2030 ?        00:00:00 ssh-agent
2033 ?        00:00:00 dbus-daemon
2034 ?        00:00:00 dbus-launch
2038 ?        00:00:00 ibus-x11
2040 ?        00:00:00 pulseaudio
2043 ?        00:00:02 gconfd-2
2044 ?        00:00:19 python
2052 ?        00:00:00 gconf-helper
2062 ?        00:00:02 gnome-settings-
2064 ?        00:00:00 seahorse-daemon
2066 ?        00:00:00 gvfsd
2072 ?        00:00:00 gvfs-fuse-daemo
2096 ?        00:00:00 notify-osd
2097 ?        00:00:00 compiz
2157 ?        00:00:46 compiz.real
2158 ?        00:00:13 gnome-panel
2161 ?        00:00:05 nautilus
2163 ?        00:00:00 bonobo-activati
2170 ?        00:00:00 trashapplet
2173 ?        00:00:00 gvfs-gdu-volume
2174 ?        00:00:00 gdu-notificatio
2175 ?        00:00:00 bluetooth-apple
2178 ?        00:00:00 update-notifier
2187 ?        00:00:00 gnome-power-man
2191 ?        00:00:00 polkit-gnome-au
2194 ?        00:00:00 gnome-volume-co
2196 ?        00:00:00 /usr/bin/gnome-
2200 ?        00:00:00 gvfsd-trash
2203 ?        00:00:00 sh
2204 ?        00:00:03 gtk-window-deco
2206 ?        00:00:00 gnome-screensav
2208 ?        00:00:00 gvfs-gphoto2-

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
9 [报告]
发表于 2010-03-25 12:05 |只看该作者
所以我前面说了, 是不是楼主的输出和我的输出不一样。他自己的代码里用了$5

你的这个输出格式,将我的代码中的$5 改成 $4 就可以得到结果了。

论坛徽章:
0
10 [报告]
发表于 2010-03-25 18:20 |只看该作者
我用的是AIX,所以$5其实就是CMD啦。

谢谢rdcwayx及各位达人,我把之后run的结果贴出来。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP