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}'
df
POSIX形式の代わりに実装された出力形式を使用するには、フィールド番号を調整してください。
そうでない場合、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)%"
動作します。