“awk with if / substr ”未按预期工作

“awk with if / substr ”未按预期工作

我想使用 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' 开头的字符串。

减法产生数字结果。

相关内容