“awk com if / substr” não funcionou como esperado

0

Eu quero filtrar os registros onde o uso do disco é maior que 70% usando df e awk / if / substr. O problema é que parece que apenas o primeiro caractere é considerado ao comparar:

comandos:

# df -Pah | awk '{if(substr($5,1,length($5)-1)>70) print $5}'
Use%
9%
8%

Mas assim funciona:

comandos:

# 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%

Alguém sabe por quê?

PS: df -Pah output, na verdade, ele é igual ao 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
    
por Rorschach 14.09.2017 / 04:05

1 resposta

0

As comparações do awk são como eu me lembro comparações numéricas ou de string, dependendo do tipo do operando à esquerda, e isso explicaria o que você está vendo: substr fornece um resultado de string e strings iniciando 'U', ' 9 'e' 8 'são todos maiores do que qualquer string começando com' 7 '.

Subtração produz um resultado numérico.

    
por 14.09.2017 / 05:40

Tags