Por que meu subcomando awk está falhando?

1

Quando eu corro

df -hl | grep '/dev/disk1' | awk '{sub(/%/, \"\");print $5}'

Estou recebendo o seguinte erro:

awk: syntax error at source line 1
context is
    {sub(/%/, >>>  \ <<< "\");}
awk: illegal statement at source line 1

Não consigo encontrar nenhuma documentação no awk sub.

df -hl | grep '/dev/disk1'

retorna

/dev/disk1                         112Gi   94Gi   18Gi    85% 24672655 4649071   84%   /

Pelo que entendi, ele deve retornar a porcentagem de espaço em disco usada.

    
por KinsDotNet 29.05.2016 / 01:01

1 resposta

1

Você simplesmente precisa remover o par de barras invertidas:

df -hl | grep '/dev/disk1' | awk '{sub(/%/, "");print $5}'

A função sub do awk está bem documentada para substituir a primeira ocorrência do padrão passada como primeiro parâmetro pela string passada como segundo parâmetro.

Aqui, o padrão é o sinal de porcentagem e a string de substituição é uma string vazia. Como está escrito na sua pergunta, o segundo parâmetro é uma string inválida, então awk reclama e sai. A instrução awk corrigida está removendo o % que aparece em sua entrada e exibe o quinto campo.

Observe que o comando grep é redundante aqui, pois awk é capaz de fazer a filtragem sozinho, portanto, o comando pode ser simplificado em:

df -hl | awk '/\/dev\/disk1/ {sub(/%/, "");print $5}'
    
por 29.05.2016 / 02:07