exibe somente linhas df que possuem mais uso de fs que 80%

5
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

Como posso canalizar a saída do comando df para exibir apenas as linhas que têm mais uso que 80%?

por exemplo: só exibiria:

/dev/ASDF   3801088     670648  83% 41759   32% /usr
    
por LanceBaynes 16.06.2011 / 09:04

4 respostas

15

Supondo que você não tenha nomes de dispositivos contendo espaços (o que é um problema quando se trata de analisar a saída de df ):

df -P | awk '0+$5 >= 80 {print}'

Adapte o número do campo se quiser usar o formato de saída df da implementação em vez do formato POSIX.

Sem o 0+ , a comparação seria lexical ( 9% seria então maior que 80 ). Usando o operador aritmético binário + , forçamos que $5 seja convertido em um número (assim, 9% se torna 9 ) e a comparação seja numérica. O uso do operador + unário (como em awk '+$5 >= 80' ) funciona em algumas implementações de awk , mas não em implementações tradicionais (aquelas gravadas por A, W e K) em que esse operador é ignorado .

    
por 16.06.2011 / 10:14
0

Não é tão elegante, mas funciona. Por favor, substitua o ext4 pelo seu próprio fs (ou pelo grep e no caso de muitos). Também substitua 10 por seu próprio valor limite.

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
    
por 06.06.2017 / 23:43
-1

Concordo com o ddeimeke, mas esta solução só funciona para 80 a 89%, não mostram 93%, por exemplo.

Para fazer isso (por exemplo, > 70%):

df -k | egrep "([70,80,90][0-9]|100)%"
    
por 14.09.2016 / 13:29
-2
df | egrep "([89][0-9]|100)%"

fará o truque.

    
por 16.06.2011 / 09:15