免费注册 查看新帖 |

Chinaunix

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

[数值计算] 磁盘利用百分率的计算 [复制链接]

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
发表于 2017-10-03 18:43 |显示全部楼层
本帖最后由 bikkuri 于 2017-10-03 18:46 编辑

大家好!
我有一个问题向大家请教。

通过查询设备状态信息可以得到如下的内容:

......
BOF last modified                 : N/A
Config file version               : WED SEP 28 08:32:42 2016 UTC
Config file last modified         : N/A
Config file last saved            : 2016/10/03 01:44:26
M/S clocking ref state            : primary

Flash - cf1:
    Administrative State          : up
    Operational state             : not equipped

Flash - cf2:
    Administrative State          : up
    Operational state             : up
    Serial number                 : 20120515    00000D16
    Firmware revision             : 20120410
    Model number                  : CF CARD 2GB
    Size                          : 1,911 MB
    Free space                    : 1,911 MB

Flash - cf3:
    Administrative State          : up
    Operational state             : up
    Serial number                 : 406VTK69Se606QC00068
    Firmware revision             : V2.23
    Model number                  : SILICONSYSTEMS INC 2GB
    Size                          : 2,001 MB
    Free space                    : 1,052 MB

Hardware Data
    Platform type                 : 7750
    Part number                   : 3HE04164AAAE02
    CLEI code                     : IPUCAUXFTB
    Serial number                 : NS1231F1762
......

现在希望通过这个设备状态信息得到设备中各Flash的使用率。
即找到以Flash开头的行,对每一块Flash,计算使用率:
Usage=(Size-Free space)/Size
Size和Free space的单位可能是MB也可能是KB,因此要折算成相同单位以后才能算使用率。
例如以上文本,希望得到的结果是:
cf2:0%;cf3:47%
因为:
(1911MB-1911MB)/1911MB=0%;
(2001MB-1052MB)/2001MB=47%

又如以下文本:
......
Flash - cf1:
    Administrative State          : up
    Operational state             : up
    Serial number                 : serial-1
    Firmware revision             : v1.0
    Model number                  : Flash 1
    Size                          : 110,984 KB
    Free space                    : 13,048 KB

Flash - uf1:
    Administrative State          : up
    Operational state             : not equipped
......
------------------------------------------------
(110984-13048)/110984=0.8824335039284942
------------------------------------------------
希望得到结果是:
cf1:88%

又如以下文本:
......
Flash - cf3:
    Administrative State          : up
    Operational state             : up
    Serial number                 :  STI1MN3610037093014
    Firmware revision             : 01/17/07
    Model number                  : STI Flash 8.0.0
    Size                          : 1,950 MB
    Free space                    : 796,032 KB
......
------------------------------------------------
(1950*1024-796032)/(1950*1024)=(1996800-796032)/1996800=0.6013461538461538
------------------------------------------------
希望得到结果是:
cf3:60%

谢谢大家的帮助。

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
发表于 2017-10-04 06:41 |显示全部楼层
本帖最后由 bikkuri 于 2017-10-04 09:32 编辑

[box@iZ94mso98zxZ:~]$ for file in f1 f2 f3; do cat $file|awk -F '[: ]+' '/Flash - /{sub(/Flash - /,"");a=$1}/Size/{sub(/,/,"");b=($4=="MB")?$3*1024:$3}/Free space/{sub(/,/,"");c=($5=="MB")?$4*1024:$4;printf("%s:%2i% ",a,(b-c)*100/b)}'; echo; done
cf2: 0% cf3:47%
cf1:88%
cf3:60%
[box@iZ94mso98zxZ:~]$

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2017-10-04 06:59 |显示全部楼层
回复 1# bikkuri

Flash - cf3:
    Administrative State          : up
    Operational state             : up
    Serial number                 :  STI1MN3610037093014
    Firmware revision             : 01/17/07
    Model number                  : STI Flash 8.0.0
    Size                          : 1,950 MB
    Free space                    : 796,032 KB


(1950*1024-796032)/(1950*1024)=(1996800-796032)/1996800=0.6013461538461538


$ awk -F'[ :-]+' 'BEGIN{t=split("KB MB GM",u);for(n=1;n<=t;++n)a[u[n]]=(2**10)**n}function sz(n,m){gsub(",","",n);return(n*(a[m]?a[m]:1))}!NF{next}$1!=""{f=/^Flash/?$2:""}f&&$2=="Size"{s=sz($3,$4)}f&&/Free space/{k=sz($4,$5);d=d";"f":"int((s-k)/s*100)"%"}END{if(d){sub("^;","",d);print d}}' F1
cf2:0%;cf3:47%

$ awk -F'[ :-]+' 'BEGIN{t=split("KB MB GM",u);for(n=1;n<=t;++n)a[u[n]]=(2**10)**n}function sz(n,m){gsub(",","",n);return(n*(a[m]?a[m]:1))}!NF{next}$1!=""{f=/^Flash/?$2:""}f&&$2=="Size"{s=sz($3,$4)}f&&/Free space/{k=sz($4,$5);d=d";"f":"int((s-k)/s*100)"%"}END{if(d){sub("^;","",d);print d}}' F2
cf1:88%

$ awk -F'[ :-]+' 'BEGIN{t=split("KB MB GM",u);for(n=1;n<=t;++n)a[u[n]]=(2**10)**n}function sz(n,m){gsub(",","",n);return(n*(a[m]?a[m]:1))}!NF{next}$1!=""{f=/^Flash/?$2:""}f&&$2=="Size"{s=sz($3,$4)}f&&/Free space/{k=sz($4,$5);d=d";"f":"int((s-k)/s*100)"%"}END{if(d){sub("^;","",d);print d}}' F3
cf3:60%

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-10-04 09:58 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-10-04 10:19 编辑
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. $/ = '';
  5. while(<DATA>){
  6.         next if(!/\AFlash\s+-\s+(\w+)/);
  7.         my $id = $1;
  8.         my ($s, $fs) = (split(/\n/))[-2, -1];
  9.         next if($s !~ /Size/ or $fs !~ /Free\s+space/);
  10.         ($s, $fs) = map {
  11.                 my ($n) = s/,//gr =~ /(\d+)/;
  12.                 (/mb\b/i ? 1024 : 1) * $n;
  13.         } ($s, $fs);
  14.         printf("$id:%d%%\n", ($s - $fs) * 100 / $s);
  15. }

  16. __DATA__
  17. BOF last modified                 : N/A
  18. Config file version               : WED SEP 28 08:32:42 2016 UTC
  19. Config file last modified         : N/A
  20. Config file last saved            : 2016/10/03 01:44:26
  21. M/S clocking ref state            : primary

  22. Flash - cf1:
  23.     Administrative State          : up
  24.     Operational state             : not equipped

  25. Flash - cf2:
  26.     Administrative State          : up
  27.     Operational state             : up
  28.     Serial number                 : 20120515    00000D16
  29.     Firmware revision             : 20120410
  30.     Model number                  : CF CARD 2GB
  31.     Size                          : 1,911 MB
  32.     Free space                    : 1,911 MB

  33. Flash - cf3:
  34.     Administrative State          : up
  35.     Operational state             : up
  36.     Serial number                 : 406VTK69Se606QC00068
  37.     Firmware revision             : V2.23
  38.     Model number                  : SILICONSYSTEMS INC 2GB
  39.     Size                          : 2,001 MB
  40.     Free space                    : 1,052 MB

  41. Hardware Data
  42.     Platform type                 : 7750
  43.     Part number                   : 3HE04164AAAE02
  44.     CLEI code                     : IPUCAUXFTB
  45.     Serial number                 : NS1231F1762

  46. Flash - cfn:
  47.     Administrative State          : up
  48.     Operational state             : up
  49.     Serial number                 :  STI1MN3610037093014
  50.     Firmware revision             : 01/17/07
  51.     Model number                  : STI Flash 8.0.0
  52.     Size                          : 1,950 MB
  53.     Free space                    : 796,032 KB
复制代码

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
发表于 2017-10-04 10:00 |显示全部楼层
谢谢您的帮助。学习了!

回复 3# jason680


论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
发表于 2018-03-26 01:22 |显示全部楼层
本帖最后由 bikkuri 于 2018-03-27 09:25 编辑

回复 2# bikkuri
原来的版本只处理了MB,没有处理KB。
修改为:
awk -F '[: ]+' '/active/{z=1}/standby/{z=0}/Flash - /{sub(/Flash - /,"");a=$1}/Size/{sub(/,/,"");b=($4=="MB")?$3*1024*1024:($4=="KB")?$3*1024:$3}/Free space/{sub(/,/,"");c=($5=="MB")?$4*1024*1024:($5=="KB")?$4*1024:$4;if(z==1)printf("%s:%2i%\n",a,(b-c)*100/b)}'


论坛徽章:
0
发表于 2018-03-27 13:50 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
发表于 2018-03-27 15:20 |显示全部楼层
回复 7# 本友会机友会摄友会

RHEL7.4
没用过powershell

论坛徽章:
0
发表于 2018-03-27 17:31 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 2018-03-27 18:05 |显示全部楼层
回复 1# bikkuri


  1. awk -F"[ :]+" '/^Flash/{a=$3}/Size/{$3=gensub(",","","g",$3);b[a]=$4=="MB"?$3*1024*1024:$4=="KB"?$3*1024:$3}/Free space/{$4=gensub(",","","g",$4);c[a]=$5=="MB"?$4*1024*1024:$5=="KB"?$4*1024:$4}END{for(i in c){d=d?d";"i":"int((b[i]-c[i])*100/b[i])"%":i":"int((b[i]-c[i])*100/b[i])"%"};print d}' file
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP