Com uma dica de chapéu para Stéphane Chazelas por suas duas respostas aqui:
Eu proponho uma solução de força bruta que faz um loop em todas as entradas de timestamp possíveis nos últimos 10 minutos:
#!/bin/ksh93
for((i=0;i<=600;i++))
do
d=$(printf '%(%b %d %H:%M:%S)T\n' "$i seconds ago")
grep "^${d} Error" logfile
done
É força bruta porque chama grep
(e printf, um built-in) 601 vezes. Ele requer um ksh93 que suporte a opção printf %T
para imprimir (e formatar) timestamps arbitrários. É mais fácil do que fazer matemática por conta própria, no entanto, devido a casos extremos como:
- limites do dia
- limites de mês
- possíveis alterações no horário de verão