"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」で始まる文字列よりも大きい。

減算は数値結果を生成します。

関連情報