9月26日shell脚本练习

回复 收藏

ps 可以查看进程的内存占用大小,写一个脚本计算一下所有进程所占用内存大小的和。(提示,使用ps aux 列出所有进程,过滤出RSS那列,然后求和){{{密码回复可见}}}

2013-09-26 09:28 举报
已邀请:
0

地平线

赞同来自:

本帖最后由 地平线 于 2013-9-26 09:34 编辑

ps aux  | awk '{print $6}'| awk 'BEGIN{ok=0}{ok+=$1}END{print ok}'
0

chekir

赞同来自:

本帖最后由 chekir 于 2013-9-26 10:01 编辑
  1. [root@localhost sbin]# ps aux |awk '{print $6}' |sed 's/[a-Z]//g' |awk '{(tot=tot+$1)};END{print tot}'
  2. 39524
  1. #! /bin/bash

  2. ps aux |awk '{print $6}' |sed 's/[a-Z]//g' |awk '{(tot=tot+$1)};END{print tot}'

  3. 或者:

  4. ps aux |awk '{print $6}' |grep -v '[a-Z]' |awk '{(tot=tot+$1)};END{print tot}'

  5. 亦或:
  6. ps aux |awk '{print $6}' |awk '{(tot=tot+$1)};END{print tot}'


1496
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
848
0
892
0
0
0
0
844
2004
1188
3284
3288
1280
580
584
580
836
584
580
576
4436
2028
4372
2020
3252
1172
1000
844
0

菠萝

赞同来自:

ps aux | awk '{(sum=sum+$6)};END{print sum}'
0

第六感

赞同来自:

本帖最后由 第六感 于 2013-9-26 10:41 编辑

#!/bin/bash
#20139926
#计算内存大小
let sum=0
for i in ` ps aux|awk -F ' ' '{print $6}'|grep -v 'RSS'`
do  sum=$[$i+$sum]
done
echo $sum
0

wikilike7

赞同来自:

本帖最后由 wikilike7 于 2013-9-26 11:13 编辑

ps aux |awk  '{print $6}'|grep -v 'RSS' | awk '{sum += $1};END {print sum}'

PS aux |awk '{print $6}' |sed '/RSS/d' |awk '{sum += $1};END {print sum}'

PS aux |awk '{print $6}' |sed 's/RSS//' |awk '{sum += $1};END {print sum}'

0

第六感

赞同来自:

第六感 发表于 2013-9-26 10:00
#!/bin/bash
#20139926
#计算内存大小

{:7_173:} 老师说的对,修改了!
0

wikilike7

赞同来自:

wikilike7 发表于 2013-9-26 10:40
ps aux |awk  '{print $6}'|grep -v 'RSS' | awk '{sum += $1};END {print sum}'

PS aux |awk '{print $ ...

我写的还是复杂了,对于语法还是不是很清楚
0

oszhang

赞同来自:

ps aux |awk  '{print$6}'| awk -F':' '{(sum+=$0)}; END {print sum}'
0

Hello_Lemon

赞同来自:

ps aux|awk '$6~/^([0-9])+$/{sum+=$6}END{print sum}'
0

larson

赞同来自:

#!/bin/bash
sum=0
for i in `ps aux|awk -F' ' '{print $6}'|grep ^[0-9]`; do
sum=$[$sum+$i]
done
echo $sum
0

zhangxiaobo

赞同来自:

ps aux | awk 'NR==1{next;}{sum+=$6}END{print sum/1000}'
0

___紸角__...

赞同来自:

看看
0

Agatha-cn

赞同来自:

1
0

hkj8808

赞同来自:

#!/bin/bash
a=`ps aux |grep -v RSS |awk '{(rss=rss+$6)};END {print rss}'`
echo "RSS=$a"
0

hkj8808

赞同来自:

#!/bin/bash
a=`ps aux |grep -v RSS |awk '{(rss=rss+$6)};END {print rss}'`
echo "RSS=$a"
0

白紙黑_Zi

赞同来自:

#! /bin/bash
ps -aux |awk -F ' ' '{print $6}' |grep -v RSS > 1.txt
sum=0
for i in `cat 1.txt`
do
echo $i
sum=$[$sum+$i]
done

echo "Is the sum of all numbers:" $sum
0

泡沫。

赞同来自:

。。。
0

牧羊人

赞同来自:

好东西
0

不断更新

赞同来自:

ps -aux | awk '{(top=$6+top)};END {print top}'
0

ocean

赞同来自:

ps -aux|awk '{sum+=$6} END {print "Sum = ", sum}'
0

Budweiser小王子

赞同来自:

练习
0

luzhen521

赞同来自:

0

楓瀛夢鞢

赞同来自:

#! /bin/bash
sum=0
for i in `ps aux |awk '$6~/[0-9]/ {print $6}'` ; do
        sum=$[$sum+$i]
done
echo $sum
0

轩鹏

赞同来自:

q
0

黑色的梦

赞同来自:

1
0

lidunhuai

赞同来自:

ps aux |awk 'NR>=2 {(tot=tot+$6)};END {print tot}'
0

齐天大圣

赞同来自:

ddddddd
0

木字当头

赞同来自:

0

zyfeifie

赞同来自:

ps aux | grep -iv rss | awk 'BEGIN{sum=0}{sum+=$6}END{print sum}'
0

鸵鸟

赞同来自:

xx
0

Louis

赞同来自:

ps aux|awk '{(tot=tot+$6)};END {print tot}'
0

游夜

赞同来自:

本帖最后由 游夜 于 2014-9-3 19:09 编辑

#!/bin/bash
sum=0
for line in  `ps aux|awk '{print $6}'|grep -v [^0-9]`;do
sum=$[$sum+$line]
done
echo $sum
0

寒一

赞同来自:

#! /bin/bash

ps aux|awk '{(sum=sum+$6)};END {print sum}'
0

wyatt88

赞同来自:

#!/bin/bash
sum=0
rss=`ps aux | awk '{print $6}'`
for size in $rss
do
if [ $size != 'RSS' ]
then
sum=$[$size+$sum]
fi
done
echo $sum
0

ocean

赞同来自:

ps -aux | grep -v 'RSS' | awk '{(sum=sum+$6)}; END {print sum}'
0

So Long

赞同来自:

#!/bin/bash
sum=`ps -aux | awk '{print $6}' |grep -v 'RSS'|xargs |sed 's/ /+/g' |bc`
echo “$sum”
0

nihao426181

赞同来自:

看看^^^^^^
0

huifeidexiaxia

赞同来自:

学习
0

路过

赞同来自:

求和
0

追梦人

赞同来自:

Xzc
0

jade

赞同来自:

学习
0

王靖

赞同来自:

kankan dsaf adsf asd
0

崔志朋

赞同来自:

筛   选   RSS
0

崔志朋

赞同来自:

                              1                                         
0

pykihwfn

赞同来自:

#!/bin/bash
#writen by alex.zhu on 2014.11.01 about "awk"
ps aux | awk '{print $6}'|awk '{sum += $1};END {print sum}'
0

王肖强

赞同来自:

  1. #!/bin/bash
  2. # The calculation memory usage script.
  3. # Writen by Wangxiaoqiang 2014-11-21.

  4. COUNT=($(ps aux | awk '{print $6}' | grep -v '^[RSS|0]'))
  5. length=${#COUNT[@]}
  6. SUM=0

  7. for ((i=0;i<$length;i++))
  8.   {
  9.     KEY=`expr ${COUNT[$i]} \+ ${SUM}`
  10.     SUM=${KEY}
  11. }

  12. echo "The sum of memory : ${SUM}"
0

王肖强

赞同来自:

  1. ps aux | awk '{print $6}' | grep -v '^[RSS|0]' | awk '{a+=$1}{print a}' | sed -n '$p'

一条的方式 。
0

aqi

赞同来自:

#!/bin/bash
memtotal=0
for i in `ps aux | awk '{ if(NR>=2) { print $6 } }'`
do
        memtotal=$[$memtotal+$i]
done
echo $memtotal
0

阳光

赞同来自:

#!/bin/bash
#author:gy
#date:2014-11-28

sum=0

for i in `ps aux | awk '{print $6}'`; do
        sum=$[$sum+$i];
done
echo $sum;
0

阳光

赞同来自:

阳光 发表于 2014-11-29 01:27
#!/bin/bash
#author:gy
#date:2014-11-28

思路大致是对的,将RSS也算进来了,以后应该自己多多检查再发表,看老师答案。
0

dantes

赞同来自:

1111111111111
0

wuhen

赞同来自:

本帖最后由 wuhen 于 2014-12-9 14:24 编辑

#!/bin/bash
a=`ps aux|awk -F " " '{print $6}'|grep [^a-zA-Z]`
sum=0
for i in $a
do
sum=$[$sum+$i]
done
echo "sum:$sum"
0

t236xuchunfang

赞同来自:

ps -aux|awk -F' ' '{print $6}'|grep '^[0-9]'>ww.txt
#!/bin/bash
sum=0
for i in `cat /root/ww.txt`
do
sum=$(($i+$sum))
done
echo the sum:$sum
0

zhangw

赞同来自:

学习下
0

denjon

赞同来自:

#!/bin/bash
echo "The total memory used of all the processes:"
ps aux|awk '{print $6}'|grep '[1-9]'|awk '{(sum+=$1)}; END {print sum}'
0

denjon

赞同来自:

学习了,刚开始学写shell 总是想着一行命令搞定,还没习惯使用变量和循环来做。
0

川娃子在大连

赞同来自:

#!/bin/bash
# -------------------------------------------------------------------------------
# Filename:    amingtest3.sh
# Revision:    1.0
# Date:        2014/12/16
# Author:      FUQIANG LI
# Email:       317377106@qq.com
# Notes:       aminglinux shell exercises of 2013-09-26
# -------------------------------------------------------------------------------
summem=0;
for i in `ps aux|awk '{print $6}'|grep -v 'RSS'`
        do

        summem=$[$i+$summem]

        done

echo "the system memory used totle is : "$summem
0

MR_K

赞同来自:

[root@www bash]# ps aux |awk '{sum+=$6}END {print sum}'
0

MR_K

赞同来自:

MR_K 发表于 2014-12-16 23:19
[root@www bash]# ps aux |awk '{sum+=$6}END {print sum}'

我试了下,过滤掉第一行之后,取值不同,还是老师的答案严谨些
[root@www bash]# ps aux | grep -v 'RSS TTY' |awk '{(sum=sum+$6)};END{print sum}'
0

649969462

赞同来自:

[root@localhost sbin]# cat 03.sh
#!/bin/bash
ps aux | awk '{print $6}' |grep "[0-9]" |awk '{(sum=sum+$1)}; END {print sum}'
0

Mё飘逸d檒

赞同来自:

kankan
0

赵海龙

赞同来自:

实在想不出用哪个命令过滤RSS列,提前看一下
0

赵海龙

赞同来自:

#! /bin/bash
# 计算所有进程所占用内存大小的和

sum=0 --->定义变量sum
for mem in `ps aux |awk '{print $6}' |grep -v 'RSS TTY'` -----> 遍历所有进程并过滤出RSS列的值
do
        sum=$[$sum+$mem] ----> 叠加每条进程的RSS值
done
echo "The total memory is $sum""k" ----> 输出sum值


还可以用一条命令完成:
ps aux |grep -v 'RSS TTY' |awk '{(sum=sum+$6)};END{print sum}' ---> 思路:先用ps aux打印出所有进程,然后grep过滤调第一行,最后通过awk筛选出RSS的值并求和


0

2422606568

赞同来自:

复习
0

zq13054480665

赞同来自:

看看
0

yaabb163

赞同来自:

ddddddd
0

hehong

赞同来自:

looklook
0

寻@轨迹

赞同来自:

本帖最后由 寻@轨迹 于 2015-2-6 16:55 编辑

#! /bin/bash
# Written By yuhui
sum=0
for mem in `ps aux | awk '{print $6}' | grep -v RSS`
do
sum=$[$sum+$mem]
done
echo total memory is $sum k

0

cmzsteven

赞同来自:

{:4_107:}
0

GAARA

赞同来自:

{:4_109:}
0

qq20847697

赞同来自:

#!/bin/bash
#
a=`ps aux|sed -n '2,$'p|awk '{print $6}'`
sum=0
for i in $a ; do
sum=$[$sum+$i]
done
echo $sum
0

陈小波

赞同来自:

练习
0

deal1120

赞同来自:

1
0

hangtiangazi

赞同来自:

顶一下铭哥。
0

wangdi244

赞同来自:

ps aux |awk '{(tot=tot+$6)}; END {print tot}' 1.log
0

ayu

赞同来自:

预习
0

tangenxin

赞同来自:

look
0

黄佳栋

赞同来自:

学习
0

黄佳栋

赞同来自:

本帖最后由 对未来有理想 于 2015-3-24 16:30 编辑

因为刚开始学脚本,都没思路,不知道从哪里下手。只会根据题目一步步去理解不会写,看到了答案,没能自己写出脚本,但还是希望把自己理解的写一下

sum首先赋值



ps aux 为了查看进程,awk '{print $6}' 为了选取第6节即RSS列(没意识到awk 可以直接取列,以为一定要有分割符),grep -v 'RSS'         取反,不取‘rss’,刚好取到rss下面的数字,然后$men 一个个取通过三个命令得到的数字。





$sum=$sum+$men,即到达数列相加的目的,得到我们想要的结果!
学习了!

第一以为awk一定要有分割符分出列然后才会被系统截取
第二以为seq 只有我们自己给的数列,没意思到有些情况下得到的数列也可以被使用


0

☆sky-郑★

赞同来自:

#!/bin/bash
sum=0
for i in `ps aux|awk '{print $6}'|grep '[0-9]'`
do
     sum=$[$sum+$i]
done
     echo $sum
0

疾风

赞同来自:

本帖最后由 疾风 于 2015-3-26 16:55 编辑

不用AWK有别的写法么?
0

小耗耗

赞同来自:

ps aux | awk 'NR>1 { print $6}' | xargs | sed 's/ /+/g' | bc
0

ztyspar

赞同来自:

ps aux |awk '{print $6}' |grep -v RSS |xargs |sed 's/ /+/g' |bc
0

贾刚

赞同来自:

123456789009
0

l5211314121

赞同来自:

本帖最后由 l5211314121 于 2015-4-1 09:23 编辑

ps aux|awk 'BEGIN{sum=0}{sum+=$6}END{print sum}'    不知道这样麻烦不,还请老师指教
0

soo

赞同来自:

ps aux |awk '{sum+=$6}; END{print sum}'
0

苏苏苏苏

赞同来自:

支持阿铭,支持linux
0

哈哈琨少

赞同来自:

学习学习
0

andreking

赞同来自:

学习下
0

温柔的笑猫

赞同来自:

  1. #!/bin/bash
  2. #Calculate how much memory is occupied by this process
  3. #2015/07/22 linan
  4. ps aux |awk -F' ' '{(sum=sum+$6)};END{print sum}'
0

llzdwyp

赞同来自:

好难啊
0

佳生-Jason

赞同来自:

学习
0

iwannachange

赞同来自:

11111111111111111
0

ayuan124

赞同来自:

{:4_111:}
0

鑫柏

赞同来自:

ps aux|awk -F ' '  '{(sum=sum+$6)};END {print sum}'
0

307141950

赞同来自:

对照答案
0

307141950

赞同来自:

对照答案
0

巧杜鹃

赞同来自:

学习
0

剑在飞

赞同来自:

{:4_92:}{:4_92:}{:4_92:}
0

wl11930728

赞同来自:

大幅度的复古风格发

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: