fs使用率が80%を超えるdf行のみを表示

fs使用率が80%を超えるdf行のみを表示
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}'

dfPOSIX形式の代わりに実装された出力形式を使用するには、フィールド番号を調整してください。

そうでない場合、0+比較は語彙的(9%より大きい80)です。+バイナリ算術演算子を使用して強制的に$5数値に変換し(したがって9%9、比較結果を数値に変換します。使用+ 1元)などの演算子はawk '+$5 >= 80'一部のawk実装では機能しますが、演算子が無視される従来の実装(A、W、およびKで書かれた実装)では機能しません。

答え2

非常にエレガントではありませんが、効果的です。 ext4を自分のfsに置き換えます(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)%"

動作します。

関連情報