validar resultado do grep

1

Estou tentando com o código abaixo imprimir Available se houver uma correspondência, senão nil

grep -o 'pattern' test.log | awk '{if($0=="pattern") print "Available"; else print "nil"}'

A parte if está funcionando bem, mas não estou obtendo a parte else se o grepped for nulo.

    
por Jeff Schaller 07.08.2018 / 10:21

1 resposta

2

Se o padrão não corresponder, então grep não produzirá nenhum resultado e o programa awk não terá dados para trabalhar. É por isso que você nunca obterá nil do código awk .

Outra maneira de fazer isso seria

if grep -q 'pattern' test.log; then
    echo 'Available'
else
    echo 'nil'
fi

A opção -q de grep é usada para impedir que o utilitário gere qualquer saída (exceto a saída de diagnóstico possivelmente). Aqui, não queremos saída de grep , apenas o status de saída.

Com awk , você ainda pode fazer seu teste se desejar, mas terá que gerar a string nil condicionalmente em um bloco END :

grep -o 'pattern' test.log |
awk '/pattern/ { print "Available"; found = 1 }
     END { if (!found) print "nil" }'

O bloco END será executado mesmo que o script awk não receba nenhuma entrada para trabalhar.

Na verdade, você pode fazer tudo com awk :

awk '/pattern/ { print "Available"; found = 1; exit }
     END { if (!found) print "nil" }' test.log

Chamar exit chamará o bloco END , portanto não podemos nos livrar da variável found .

    
por 07.08.2018 / 10:25

Tags