仅显示 fs 使用率超过 80% 的 df 行

仅显示 fs 使用率超过 80% 的 df 行
root@SERVER ~$ df
Filesystem  512-blocks  Free    %Used   Iused   %Iused  Mounted on
/dev/YXCV   655360      365632  45% 6322    13% /
/dev/ASDF   3801088     670648  83% 41759   32% /usr
/dev/ASR    1048576     500496  53% 5555    9%  /var

如何通过管道将df命令的输出仅显示使用率超过 80% 的行?

例如:它只会显示:

/dev/ASDF   3801088     670648  83% 41759   32% /usr

答案1

假设您没有包含空格的设备名称(在解析 的输出时这是一个痛苦df):

df -P | awk '0+$5 >= 80 {print}'

如果您想使用实现的df输出格式而不是 POSIX 格式,请调整字段编号。

如果没有0+,比较将是词法的(9%然后将大于80)。通过使用+二元算术运算符,我们强制$5将其转换为数字(因此9%变为9)并将比较结果转换为数字。使用+ 一元运算符(如awk '+$5 >= 80')在某些awk实现中有效,但在传统实现(由 A、W 和 K 编写的实现)中不起作用,在传统实现中该运算符被忽略。

答案2

不太优雅,但有效。请用您自己的 fs 替换 ext4(如果有很多,则用 grep 和)。还要用您自己的阈值替换 10。

for fs in `cat /proc/mounts | grep ext4 | awk ' { print $2 }' | tr '\n' ' '` ;  do SPC=$( df $fs | awk 'END{ print $(NF-1) }' | sed 's/[^0-9]*//g' ) ; if [ $SPC -gt 10 ]; then  echo "$fs used more than 10";  fi done

答案3

我很抱歉,并不是想窃取某人的贡献,但我还不能发表评论。

我注意到该df命令实际上错过了 90-99 之间的任何内容。此更改修复了它:

df -P | egrep "([80][0-9]|[90][0-9]|100)%"

答案4

df | egrep "([89][0-9]|100)%"

会成功的。

相关内容