Resposta destinada à versão original da pergunta
Para o seu comando, substituindo os comandos grep-tail-grep-if, tente:
awk '/status change/{last=$0} END{printf "It is %sBackup\n",(last~/Active/?"":"not ")}' "/apps/tests/$2"
Como funciona:
-
/status change/{last=$0}Sempre que uma linha contendo
status changeé encontrada, ela é salva na variávellast. -
END{printf "It is %sBackup\n",(last~/Active/?"":"not ")}Isso é executado depois que terminamos de ler o arquivo. Nesse momento,
lastconterá o conteúdo da última linha que continhastatus change. Se essa linha também contiverActive, então imprimiremosIt is Backup. Caso contrário, imprimiremosIt is not Backup.A presença ou ausência da palavra
noté controlada pela instrução ternária aparentemente complexa:(last~/Active/?"":"not "). Esta declaração apenas verifica selast~/Active/é verdadeiro (o que significa que a última linha contémActive). Em caso afirmativo, a instrução ternary retorna a string vazia"". Caso contrário, retorna a string"not ".
Monitoramento contínuo
Para monitorar continuamente:
ssh "server_one@$1" tail -f "/apps/tests/$2" | awk '/status change/{printf "It is %sBackup\n",($0~/Backup/?"":"not ")}'