我想使用 df 和 awk/if/substr 过滤磁盘使用率大于 70% 的记录。问题是比较时看起来只考虑第一个字符:
命令:
# df -Pah | awk '{if(substr($5,1,length($5)-1)>70) print $5}'
Use%
9%
8%
但就像这样它可以工作:
命令:
# df -Pah | awk '{if(substr($5,1,length($5)-1)-70>0) print $5}'
100%
100%
100%
# df -Pah | awk '{if(substr($5,1,length($5)-1)-30>0) print $5}'
54%
35%
100%
100%
100%
有谁知道为什么?
PS:df -Pah
输出,实际上它与退出相同df -h
:
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 2.0G 1020M 894M 54% /
udev 4.0G 420K 4.0G 1% /dev
tmpfs 4.0G 16M 3.9G 1% /dev/shm
答案1
我记得 awk 比较是数字比较或字符串比较,具体取决于左操作数的类型,这可以解释您所看到的内容:substr
给出字符串结果,以及以“U”、“9”和“8”开头的字符串' 都大于任何以 '7' 开头的字符串。
减法产生数字结果。