Obtendo um intervalo de linhas entre timestamps de / var / log / messages

1

Eu quero obter todas as linhas entre dois timestamps de / var / log / messages. Eu só tenho hora de início que eu forneço ao meu script como entrada. O roteiro deveria me pegar todas as linhas até o dia seguinte como saída. Eu tentei isso -

startDate=$1
toDate='date -d "${startDate}+1day"'
sed -n '/${startDate}/ , /${toDate}/p' messages* 

No entanto, encontrei um problema com essa abordagem quando o padrão $toDate não foi encontrado nos logs de mensagens. Então eu modifiquei meu código para isso -

startDate=$1
toDate='date -d "${startDate}+1day"'
until [ 'grep -Fxq ${toDate} messages*' ];
do
    echo ${toDate}
    epoch='date -d "${toDate}" +%s'
    new_epoch=$(($epoch+1))
    next_ts='date -d "1970-01-01 ${new_epoch} sec"'
    toDate=${next_ts:4:15}
done
sed -n '/${startDate}/ , /${toDate}/p' messages* 

Agora, estou tendo uma data difícil para correspondência nos registros. Para minha entrada de Nov 6 07:17:04 UTC 2017 , o código gera a próxima data como Nov 7 07:17:04 . Observe que os carimbos de data / hora reais nos logs de mensagens contêm dois espaços entre o nome do mês e as datas do dígito único. Então eu não sou capaz de igualar a string.

Existe alguma maneira em torno disso? Eu quero que o script funcione com datas de dois dígitos (como 10) também.

    
por pragmatic 10.11.2017 / 10:17

0 respostas

Tags