龙空技术网

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

毕小宝 292

前言:

目前看官们对“linux怎么计算一台机器的分区使用率”大概比较讲究,看官们都想要剖析一些“linux怎么计算一台机器的分区使用率”的相关文章。那么小编在网摘上搜集了一些关于“linux怎么计算一台机器的分区使用率””的相关内容,希望姐妹们能喜欢,看官们快快来了解一下吧!

背景

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

脚本思路

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

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

不规则输出的统计脚本

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

非标准磁盘信息查

基本流程:

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 的语句都必须包裹在 {}中,调试了一阵子才发现这个语法错误。

规则输出的统计脚本

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

磁盘信息

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

# 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 命令作为第一个命令就正确了。

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

启示录

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

标签: #linux怎么计算一台机器的分区使用率