awk if 包含_awk 命令计算磁盘使用率,强大的编程功能,何不了解一下?

背景

利用 df 命令计算 Linux 系统上磁盘的使用率,脚本编写过程有些周折,没想到不同操作系统上 df 命令的输出内容还有差异,所以脚本需要定制编写。

脚本思路

利用 awk ,累加 used 列得到已使用的空间大小,然后将 used 和 Avail 两列累加得到操作系统磁盘总大小,最终二者相除就是使用率。

此外不能直接用 size 列作为磁盘总大小,是因为这里面包含隐藏文件大小,三列之间的关系是 size > used + Avail。

不规则输出的统计脚本

不规则输出,是指碰到一台机器 df 输出后第一行是 title ,第二行是只有一列的磁盘名称,第三行又缺少第一列,导致输出显示错乱了。

15e9791b70726c3d226e49fd84f58c24.png

非标准磁盘信息查


基本流程:
1、使用 awk 空格分割;
2、分割后的输出中第二行、第三行都是不规则的,累加时需要特殊处理;
3、累加得到分子和分母;
4、除法并格式化输出。

最终脚本为:

# 第三行累加第二、三列;其他行累加三、四列得到磁盘总空间diskTotal=`df -m| awk 'BEGIN{sum=0} {if(NR==3){sum=sum+$2+$3;} else if(NR>3){sum=sum+$3+$4;}}END{print sum}'`#第三行累加第二列(第一列为 Size 列的值);其他行累加第三列得到 used 磁盘空空间diskUsed=`df -m| awk 'BEGIN{sum=0}{if(NR==3){sum=sum+$2;} else if(NR>3){sum=sum+$3;}}END{print sum}'`# 除法计算使用率diskPercent=`echo "scale=2;$diskUsed*100/$diskTotal" | bc | awk '{printf "%.2f", $0}'`echo $diskPercent

注意:awk 的语句都必须包裹在 {}中,调试了一阵子才发现这个语法错误。

规则输出的统计脚本

正常的磁盘输出信息如下:

5c7c7a9be83519a9ac3a4fc23bb8e588.png

磁盘信息


这里除了标题行,其他每行的列数一致,直接统一脚本就好了。

# used 列和 Avail 两列累加diskTotal=`df -m| awk 'BEGIN{sum=0}{if($4!~/anon/)sum=sum+$3+$4}END{print sum}'`# used 列累加diskUsed=`df -m| awk 'BEGIN{sum=0}{if($3!~/anon/)sum+=$3}END{print sum}'`# 除法计算使用率diskPercent=`echo "scale=2;$diskUsed*100/$diskTotal" | bc | awk '{printf "%.2f", $0}'`echo $diskPercent

一个奇怪的现象

/bin/sh -c 执行批量命令时如果 echo 一个数结果输出空格,如果不把 echo 命令作为第一个命令就正确了。

84e873062ad9c6792666ed11c600a04f.png


猜测,可能是使用 -c 参数批量执行命令时,第一个命令不能是 echo 。

启示录

前面也写过使用 awk 命令解析 JSON 值的案例,awk 蕴含的丰富编程能力,可以完成复杂的功能,还是值得一学的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值