Estou tentando passar pelo arquivo de log de um host IPA para obter os últimos cinco minutos de conteúdo e obter atualizações sobre coisas como novas criações de usuários ou alterações de DNS. Eu quero cronometrar isso para que a cada cinco minutos ele verifique os cinco minutos anteriores, passe e combine algumas strings e envie por e-mail esses resultados. Não sei comparar facilmente as strings do tipo apresentado no log:
20200114184803 = 14-01-2020 | 18:48:03
time: 20200114184803
Stuff
Stuff
Stuff
time: 20200114184804
Stuff
Stuff
Stuff
time: 20200114184811
Stuff
Stuff
Stuff
Eu dividi em algumas variáveis, mas você provavelmente pode seguir ou canalizar um pouco melhor:
Explicação:
fma=...
diz armazenar na variável shellfma
osdate
cinco minutos atrás no formato ano, mês, dia, hora, minuto, segundo, que parece ser o que seu log faz.line_num=...
diz para ler o arquivo de trás para frente e canalizá-lo paraawk
. Noawk
programa, salve a variável bash$fma
comofive_minutes_ago
, então, se o número de campos for maior que um e o tempo de log for menor que o tempo de destino, imprima o número de linhas que vimos até agora (incluindo aquelas que não t qualificar) e sair. Armazene o resultado como variável shellline_num
.tail
para obter as últimasline_num
linhas defile.txt
Nota: Você terá que ajustar o número de campos verificados, já que você provavelmente tem mais do que "coisas" lá, mas isso deve levar você a maior parte do caminho.
Eu resolvi o problema com
awk
no meu script:Isso corrigiu meus problemas com esses carimbos de data e hora e posso analisar o arquivo de log.