免费注册 查看新帖 |

Chinaunix

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

求助 编写一个shell脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-14 21:04 |只看该作者 |倒序浏览
一个文件包括多次ps aux的执行结果,我想对每次的ps aux计算其%cpu的和(注意:其中每次ps aux得到的行数不一定一样,比如第一次ps aux结果有10行,第二次ps aux有8行)

bj-djt-win-scp1b scu/bin> ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       145  0.1  0.0      0     0 ?        S    May08  10:34 [pdflush]
root      7773  0.2  0.0   9008  2500 ?        Ss   May08  27:24 /bin/sh /etc/init.d/init.cssd fatal
root      8995  0.4  0.3 473856 28840 ?        Ssl  May08  45:27 /oracle/crs/bin/crsd.bin reboot
oracle   12474  0.2  2.6 233344 217844 ?       SLl  May08  22:04 /oracle/crs/bin/ocssd.bin
scu      29189  0.8  0.6  70716 50404 ?        S    May08  79:50 manager 0
scu      29221  1.0  2.8 1239576 230188 ?      S    May08 100:59 scf 0 1
scu      29222  1.0  2.8 1239512 229856 ?      S    May08 100:42 scf 0 2
scu      29223  1.0  2.8 1239676 229924 ?      S    May08  99:58 scf 0 3
scu      29224  1.0  2.8 1239508 230132 ?      S    May08 100:08 scf 0 4
oracle   29339  0.3  7.7 4302156 631068 ?      Ss   May08  31:46 oracleora11g2 (LOCAL=NO)
oracle   29346  0.3  7.7 4302152 631824 ?      Ss   May08  31:49 oracleora11g2 (LOCAL=NO)
oracle   29353  0.3  7.7 4302104 629432 ?      Ss   May08  31:30 oracleora11g2 (LOCAL=NO)
oracle   29360  0.3  7.7 4302112 626508 ?      Rs   May08  31:42 oracleora11g2 (LOCAL=NO)
root     24151  0.3  0.0   8200  3092 ?        S<L  00:00   2:46 /usr/bin/atop -a -w /var/log/atop/atop_20100514 10
bj-djt-win-scp1b scu/bin> ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       145  0.1  0.0      0     0 ?        S    May08  10:34 [pdflush]
root      7773  0.2  0.0   9008  2500 ?        Ss   May08  27:24 /bin/sh /etc/init.d/init.cssd fatal
root      8995  0.4  0.3 473856 28840 ?        Ssl  May08  45:27 /oracle/crs/bin/crsd.bin reboot
oracle   12474  0.2  2.6 233344 217844 ?       SLl  May08  22:04 /oracle/crs/bin/ocssd.bin
scu      29189  0.8  0.6  70716 50404 ?        S    May08  79:50 manager 0
scu      29221  1.0  2.8 1239576 230188 ?      S    May08 100:59 scf 0 1
scu      29222  1.0  2.8 1239512 229856 ?      S    May08 100:42 scf 0 2
scu      29223  1.0  2.8 1239676 229924 ?      S    May08  99:58 scf 0 3
scu      29224  1.0  2.8 1239508 230132 ?      S    May08 100:08 scf 0 4
oracle   29339  0.3  7.7 4302156 631080 ?      Ss   May08  31:46 oracleora11g2 (LOCAL=NO)
oracle   29346  0.3  7.7 4302152 631828 ?      Ss   May08  31:49 oracleora11g2 (LOCAL=NO)
oracle   29353  0.3  7.7 4302104 629432 ?      Ss   May08  31:30 oracleora11g2 (LOCAL=NO)
oracle   29360  0.3  7.7 4302112 626508 ?      Ss   May08  31:42 oracleora11g2 (LOCAL=NO)
root     24151  0.3  0.0   8200  3092 ?        S<L  00:00   2:46 /usr/bin/atop -a -w /var/log/atop/atop_20100514 10
bj-djt-win-scp1b scu/bin> ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       145  0.1  0.0      0     0 ?        S    May08  10:34 [pdflush]
root      7773  0.2  0.0   9008  2500 ?        Ss   May08  27:24 /bin/sh /etc/init.d/init.cssd fatal
root      8995  0.4  0.3 473856 28840 ?        Ssl  May08  45:27 /oracle/crs/bin/crsd.bin reboot
oracle   12474  0.2  2.6 233344 217844 ?       SLl  May08  22:04 /oracle/crs/bin/ocssd.bin
scu      29189  0.8  0.6  70716 50404 ?        S    May08  79:50 manager 0
scu      29221  1.0  2.8 1239576 230188 ?      S    May08 100:59 scf 0 1
scu      29222  1.0  2.8 1239512 229856 ?      S    May08 100:42 scf 0 2
scu      29223  1.0  2.8 1239676 229924 ?      S    May08  99:58 scf 0 3
scu      29224  1.0  2.8 1239508 230132 ?      S    May08 100:08 scf 0 4
oracle   29339  0.3  7.7 4302156 631080 ?      Ss   May08  31:46 oracleora11g2 (LOCAL=NO)
oracle   29346  0.3  7.7 4302152 631836 ?      Ss   May08  31:49 oracleora11g2 (LOCAL=NO)
oracle   29353  0.3  7.7 4302104 629432 ?      Ss   May08  31:30 oracleora11g2 (LOCAL=NO)
oracle   29360  0.3  7.7 4302112 626508 ?      Ss   May08  31:42 oracleora11g2 (LOCAL=NO)
root     24151  0.3  0.0   8196  3088 ?        S<L  00:00   2:46 /usr/bin/atop -a -w /var/log/atop/atop_20100514 10
bj-djt-win-scp1b scu/bin> ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       145  0.1  0.0      0     0 ?        S    May08  10:34 [pdflush]
root      7773  0.2  0.0   9008  2500 ?        Ss   May08  27:24 /bin/sh /etc/init.d/init.cssd fatal
root      8995  0.4  0.3 473856 28840 ?        Ssl  May08  45:27 /oracle/crs/bin/crsd.bin reboot
oracle   12474  0.2  2.6 233344 217844 ?       SLl  May08  22:04 /oracle/crs/bin/ocssd.bin
scu      29189  0.8  0.6  70716 50404 ?        S    May08  79:50 manager 0
scu      29221  1.0  2.8 1239576 230188 ?      S    May08 101:00 scf 0 1
scu      29222  1.0  2.8 1239512 229856 ?      S    May08 100:42 scf 0 2
scu      29223  1.0  2.8 1239676 229924 ?      S    May08  99:58 scf 0 3
scu      29224  1.0  2.8 1239508 230132 ?      S    May08 100:08 scf 0 4
oracle   29339  0.3  7.7 4302156 631080 ?      Ss   May08  31:47 oracleora11g2 (LOCAL=NO)
oracle   29346  0.3  7.7 4302152 631836 ?      Ss   May08  31:49 oracleora11g2 (LOCAL=NO)
oracle   29353  0.3  7.7 4302104 629432 ?      Ss   May08  31:30 oracleora11g2 (LOCAL=NO)
oracle   29360  0.3  7.7 4302112 626508 ?      Ss   May08  31:42 oracleora11g2 (LOCAL=NO)
root     24151  0.3  0.0   8196  3088 ?        S<L  00:00   2:46 /usr/bin/atop -a -w /var/log/atop/atop_20100514 10
bj-djt-win-scp1b scu/bin> ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       145  0.1  0.0      0     0 ?        S    May08  10:34 [pdflush]
root      7773  0.2  0.0   9008  2500 ?        Ss   May08  27:24 /bin/sh /etc/init.d/init.cssd fatal
root      8995  0.4  0.3 473856 28840 ?        Ssl  May08  45:27 /oracle/crs/bin/crsd.bin reboot
oracle   12474  0.2  2.6 233344 217844 ?       SLl  May08  22:04 /oracle/crs/bin/ocssd.bin
scu      29189  0.8  0.6  70716 50404 ?        S    May08  79:50 manager 0
scu      29221  1.0  2.8 1239576 230188 ?      S    May08 101:00 scf 0 1
scu      29222  1.0  2.8 1239512 229856 ?      S    May08 100:42 scf 0 2
scu      29223  1.0  2.8 1239676 229924 ?      S    May08  99:58 scf 0 3
scu      29224  1.0  2.8 1239508 230132 ?      S    May08 100:08 scf 0 4
oracle   29339  0.3  7.7 4302156 631128 ?      Ss   May08  31:47 oracleora11g2 (LOCAL=NO)
oracle   29346  0.3  7.7 4302152 631836 ?      Ss   May08  31:49 oracleora11g2 (LOCAL=NO)
oracle   29353  0.3  7.7 4302104 629432 ?      Ss   May08  31:30 oracleora11g2 (LOCAL=NO)
oracle   29360  0.3  7.7 4302112 626524 ?      Ss   May08  31:42 oracleora11g2 (LOCAL=NO)
root     24151  0.3  0.0   8196  3088 ?        S<L  00:00   2:46 /usr/bin/atop -a -w /var/log/atop/atop_20100514 10
oracle   13566  3.0  0.4 4298468 34548 ?       Ss   13:46   0:00 ora_j000_ora11g2

论坛徽章:
0
2 [报告]
发表于 2010-05-14 21:32 |只看该作者
awk 'NR>1{total+=$3}END{print total}'

论坛徽章:
0
3 [报告]
发表于 2010-05-14 22:24 |只看该作者
本帖最后由 zhangshebao 于 2010-05-14 22:31 编辑
  1. i=1
  2. for [ $i -le 10 ];do
  3. ps pux
  4. echo "END"
  5. i=`expr $i + 1`
  6. done|awk '
  7. {
  8. if ($0=="END"){
  9. if (cpu>0)print "CPU="cpu;
  10. cpu=0;
  11. } else {
  12. cpu+=$3;
  13. }
  14. }'
复制代码

找一下你的文件中每个ps命令之间的分隔有什么特征,如果可以的话,每次ps后增加一个echo语句告诉awk ps结束了.
如果不介意下个ps时显示上次ps的结果,也可以用$1=="USER"或$0==标题行作为输出的条件.

论坛徽章:
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-05-14 22:40 |只看该作者
回复 2# iori809


你没有理解楼主的意思吧?

论坛徽章:
0
5 [报告]
发表于 2010-05-15 04:25 |只看该作者
try:

  1. awk -v RS="\n*bj-djt-win-scp1b scu/bin> ps aux\n|\n" 'NR>2&&s~"\n*bj-djt-win-scp1b scu/bin> ps aux\n"{print n;n=0}NR!=1{n+=$3}{s=RT}END{print n}' URFILE
复制代码

论坛徽章:
0
6 [报告]
发表于 2010-05-15 09:08 |只看该作者
回复 4# Shell_HAT


    让折腾大哥见笑了~呵呵. 我理解需求的能力不行啊~赶紧写一个挽回声誉
[root@Dan scripts]# awk '{if($0 ~ /CPU/){while(getline tmp > 0){if(tmp ~ /ps/){print total;total=0;getline}else{split(tmp,array);total+=array[3]}}}}END{print total}' linux.142
7.2
7.2
7.2
7.2
10.2

论坛徽章:
0
7 [报告]
发表于 2010-05-15 12:39 |只看该作者
awk '/ps aux/&&NR>1{print cpu;cpu=0}{cpu+=$3}END{print cpu}' data

论坛徽章:
0
8 [报告]
发表于 2010-05-15 13:12 |只看该作者
回复 8# lucash


   

论坛徽章:
3
15-16赛季CBA联赛之辽宁
日期:2017-12-28 12:15:1015-16赛季CBA联赛之福建
日期:2017-12-28 12:26:5115-16赛季CBA联赛之新疆
日期:2018-03-07 15:09:17
9 [报告]
发表于 2010-05-17 10:33 |只看该作者
ps aux    才十几行 ?


[oracle@RAC2 ~]$ ps aux | wc -l
275
[oracle@RAC2 ~]$ ps aux | grep -v oracle | wc -l
95
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP