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,
last
conterá 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 ")}'