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)%"
会成功的。