免费注册 查看新帖 |

Chinaunix

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

[文本处理] echo算法问题~~~~~~~~~~ [复制链接]

论坛徽章:
2
2015年亚洲杯之伊拉克
日期:2015-04-13 10:55:1115-16赛季CBA联赛之山西
日期:2016-05-16 09:54:41
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-10-23 11:40 |只看该作者 |倒序浏览

我想使用echo中算出内存使用百分比,以及内存的使用大小显示,可是算法这里总出错
  1. #!/bin/bash
  2. while true
  3. do
  4. datetime=$(date +"%F %T")
  5. usecpu=$(sar  -p  1  1 |awk '/Average/{print 100-$NF"%"}')
  6. #echo  -n "$datetime    CPU:$usecpu   "
  7. total=`free|awk '/Mem/{print $2}'`
  8. used=`free|awk '/Mem/{print $2-$4-$6-$7}'`
  9. echo "Memory:sclae=1;$used/$total*100'% '$used/1024'M/'$total/1024'M'"
  10. sleep 4
  11. done
复制代码

论坛徽章:
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
2 [报告]
发表于 2014-10-23 12:45 |只看该作者
你抄别人的代码的时候是不是漏掉了一部分?
echo命令本身是不能做计算的,通常是结合bc命令一起使用。

论坛徽章:
2
2015年亚洲杯之伊拉克
日期:2015-04-13 10:55:1115-16赛季CBA联赛之山西
日期:2016-05-16 09:54:41
3 [报告]
发表于 2014-10-23 13:40 |只看该作者
回复 2# Shell_HAT


    我改了一下代码
  1. #!/bin/bash
  2. while true
  3. do
  4. datetime=$(date +"%F %T")
  5. usecpu=$(sar  -p  1  1 |awk '/Average/{print 100-$NF"%"}')
  6. echo  -n "$datetime    CPU:$usecpu   "
  7. total=`free|awk '/Mem/{print $2}'`
  8. used=`free|awk '/Mem/{print $2-$4-$6-$7}'`
  9. mem=`free|awk -v t=$total -v u=$used '{print "Memory:"(u/t*100)"%        "u/1024"M/"t/1024"M"}'`
  10. sleep 1
  11. done
复制代码
结果:
  1. 2014-10-22 22:37:47    CPU:0%           Memory:9.46042%        1407.93M/14882.3M
  2. Memory:9.46042%        1407.93M/14882.3M
  3. Memory:9.46042%        1407.93M/14882.3M
  4. Memory:9.46042%        1407.93M/14882.3M
复制代码
为什么会多出来三行?

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
4 [报告]
发表于 2014-10-23 13:43 |只看该作者
两个条件都会用awk,最后结果就不会用awk了???
简单的bash运算也可以这样

[root@FILE_SHARE ~]# a=2
[root@FILE_SHARE ~]# b=3
[root@FILE_SHARE ~]# echo $((a+b))
5
[root@FILE_SHARE ~]# echo $((a-b))
-1
[root@FILE_SHARE ~]# echo $((a*b))
6
[root@FILE_SHARE ~]# echo $((a/b))
0
[root@FILE_SHARE ~]# echo $((a**b))
8

论坛徽章:
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
5 [报告]
发表于 2014-10-23 13:46 |只看该作者
回复 3# little_angel


你发帖的时候是不是又抄错代码了,它根本不会输出内存的使用情况。
[root]# ./test.sh
2014-10-23 13:45:08    CPU:0%   2014-10-23 13:45:10    CPU:1.01%   2014-10-23 13:45:12    CPU:1.02%   2014-10-23 13:45:14    CPU:1.02%

论坛徽章:
2
2015年亚洲杯之伊拉克
日期:2015-04-13 10:55:1115-16赛季CBA联赛之山西
日期:2016-05-16 09:54:41
6 [报告]
发表于 2014-10-23 13:49 |只看该作者
回复 5# Shell_HAT


    贴错了,呵呵
  1. #!/bin/bash
  2. while true
  3. do
  4. datetime=$(date +"%F %T")
  5. usecpu=$(sar  -p  1  1 |awk '/Average/{print 100-$NF"%"}')
  6. #echo  -n "$datetime    CPU:$usecpu   "
  7. total=`free|awk '/Mem/{print $2}'`
  8. used=`free|awk '/Mem/{print $2-$4-$6-$7}'`
  9. mem=`free|awk -v t=$total -v u=$used '{print "Memory:"(u/t*100)"%        "u/1024"M/"t/1024"M"}'`
  10. echo  -n "$datetime    CPU:$usecpu   $mem"
  11. sleep 1
  12. done
复制代码

论坛徽章:
2
2015年亚洲杯之伊拉克
日期:2015-04-13 10:55:1115-16赛季CBA联赛之山西
日期:2016-05-16 09:54:41
7
发表于 2014-10-23 13:50
回复 4# dn833


    我明白了,谢谢

论坛徽章:
2
2015年亚洲杯之伊拉克
日期:2015-04-13 10:55:1115-16赛季CBA联赛之山西
日期:2016-05-16 09:54:41
8 [报告]
发表于 2014-10-23 13:54 |只看该作者
回复 4# dn833


    输出结果为0,如果想要去小数该怎么办?小数点后取1位
  1. [root@FILE_SHARE ~]# echo $((a/b))
  2. 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
9 [报告]
发表于 2014-10-23 13:59 |只看该作者
本帖最后由 Shell_HAT 于 2014-10-23 13:59 编辑

回复 6# little_angel


#!/bin/bash
while true
do
datetime=$(date +"%F %T")
usecpu=$(sar  -p  1  1 |awk '/Average/{print 100-$NF"%"}')
#echo  -n "$datetime    CPU:$usecpu   "
total=`free|awk '/Mem/{print $2}'`
used=`free|awk '/Mem/{print $2-$4-$6-$7}'`
mem=`free|awk -v t=$total -v u=$used 'BEGIN{print "Memory:"(u/t*100)"%        "u/1024"M/"t/1024"M"}'`
echo "$datetime    CPU:$usecpu   $mem"
sleep 1
done

论坛徽章:
2
2015年亚洲杯之伊拉克
日期:2015-04-13 10:55:1115-16赛季CBA联赛之山西
日期:2016-05-16 09:54:41
10 [报告]
发表于 2014-10-23 14:06 |只看该作者
回复 9# Shell_HAT


    我明白了, 匹配关键字貌似也可以。想请教一下awk中如何限制小数位?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP