Os logs estão no formato:
2018-06-25 00:00:20,073 DEBUG SAMPLE TEXT CONTENT
2018-06-26 00:00:20,073 ERROR SAMPLE TEXT CONTENT
2018-06-26 17:37:20,073 ERROR SAMPLE TEXT CONTENT
2018-06-26 19:00:20,073 DEBUG SAMPLE TEXT CONTENT
2018-06-27 00:00:20,073 DEBUG SAMPLE TEXT CONTENT
2018-06-28 00:00:20,073 ERROR SAMPLE TEXT CONTENT
2018-06-29 00:00:20,073 ERROR SAMPLE TEXT CONTENT
2018-06-30 00:00:20,073 DEBUG SAMPLE TEXT CONTENT
2018-07-01 11:00:20,073 ERROR SAMPLE TEXT CONTENT
2018-07-02 02:00:20,073 DEBUG SAMPLE TEXT CONTENT
2018-07-02 00:00:20,073 ERROR SAMPLE TEXT CONTENT
2018-07-03 20:00:20,073 ERROR SAMPLE TEXT CONTENT
Quero encontrar e exibir todos os logs entre 2 datas (suponha 2018-06-26 a 2018-07-02) que contenham a palavra ERROR. Vou pegar as datas dinamicamente para que sejam variáveis $FROM e $TO.
Qualquer grep
, awk
ou sed
implementação fará
EDIT: As datas $ TO e $ FROM devem ser inclusivas e podem precisar acessar vários arquivos de log para que os logs não sejam classificados
awk, usando
-v
a opção para passar variáveis do shell para variáveis awk:Usando AWK:
awk '/'$FROM'/,/'$TO'/ {print $0}' log.txt | grep ERROR
Usando sed:
Simples mas eficaz;
egrep '2018-06-26|2018-07-02' log file | grep "ERROR"
Faça um loop nas datas ( via ):