como combinar o número com% do comando df -k

1

no meu script bash eu quero imprimir a capacidade de uso da partição / var do comando df -k

Eu faço o seguinte

     df -k | grep var | awk '{print $5}'

o problema é que, às vezes, o número "use%" existe no campo quatro e, às vezes, no quinto e às vezes em outro campo, como seis ou mais

, por isso quero corresponder ao NUMBER% da partição var

por favor conselho como combinar o uso% number of var partition (maneira elegante)

Obrigado

exemplo1

df -k

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3             13204256   4247972   8274728  34% /
/dev/sda5              5080796    141540   4677000   3% /tmp
/dev/sda2             14013128   7578564   5711240  58% /var
/dev/sda1               194442     40649    143754  23% /boot
tmpfs                  1037756         0   1037756   0% /dev/shm

exemplo2

 df -k

  Filesystem           1K-blocks      Used Available Use% Mounted on
  /dev/mapper/SysGroup-lv_root
                  18578172   2680752  14953704  16% /
  tmpfs                   510240         0    510240   0% /dev/shm
  /dev/sda1               198337     50064    138033  27% /boot
  /dev/mapper/SysGroup-lv_tmp
                   5160576    141464   4756968   3% /tmp
  /dev/mapper/SysGroup-lv_var
                  28899452   3481568  23949880  13% /var
    
por maihabunash 22.09.2014 / 16:11

4 respostas

2

Que tal uma solução grep pura?

df -k | grep var | grep -o '[0-9]*%'

Você pode juntar esses dois greps com uma pequena ajuda de regexp perl:

df -k | grep -Po 'var.* \K[0-9]*%'
    
por 22.09.2014 / 16:24
1

Você pode usar uma expressão regular para corresponder ao número%:

df -k | grep -E ' /run$' | grep -Eo '[0-9]+%'

Alguma explicação.

df -k
  • Auto-explicativo: mostra a tabela livre de disco

    grep -E '/ var $'

  • Use o mecanismo regexp estendido com grep para corresponder ao /var mountponit

  • A expressão regular /var$ ancora o padrão ao final da linha, portanto, não corresponde a /var/run , /var/tmp , o que seria um grep var simples. Observe também o espaço antes da barra.

    grep -Eo '[0-9] +%'

    • -E ativará a expressão regular PCRE no Grep
    • -o imprimirá apenas a string correspondente

A expressão regular é bem simples:

  • [0-9] corresponde a qualquer dígito
  • + significa corresponderá a pelo menos um dígito
  • % corresponderá a % char

Exemplo de saída:

$ df -k | grep -E ' /var$' | grep -Eo '[0-9]+%'
1%

Boa parte é que não importa em qual posição o Use% é.

Se o seu grep suportar expressões regulares PCRE (o Mac OSX não, por exemplo), você pode usar um único regexp:

df -h | grep -Po '[0-9]+%(?= /var$)'

Isso usa o regexp Perl e usa o "look behind" para ancorar no padrão /var$ e corresponder ao regexp. Se você está curioso, pode ler algo sobre esse recurso em este tutorial .

    
por 22.09.2014 / 16:59
1

Veja a solução elegante que você precisa:

Se você quer apenas o / var, então

df --output=pcent /var

Se você preferir usar o grep

df --output=source,pcent | grep var

Ou você pode usar o formato posix onde o quinto campo é sempre Use%

df -k --portability | grep var | awk '{print $5}'
    
por 22.09.2014 / 19:49
0

Você pode usar:

.... | awk '{print $(NF-1)}'

Isso pode fazer com que o cabeçalho de df output seja impresso se contiver o padrão grep . Para evitar isso, você pode:

.... | awk '$(NF-1) ~ /%/'

De uma maneira mais geral, POSIXly, use a opção -P de df :

df -P | .... | awk '{print $5}'
    
por 22.09.2014 / 16:15