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 .