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」で始まる文字列よりも大きい。
減算は数値結果を生成します。