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
.