Corresponde a marca de data e hora igual ou anterior mais próxima

1

Eu tenho uma série de timestamps que representam eventos, por exemplo:

20150401_1120    // event a
20150401_1211    // event b

E uma série de arquivos de log, cada um representando um período de tempo fixo e marcado com o início do período, por exemplo:

$ ls | egrep -o [0-9]{8}_[0-9]{4}

dá:

20150401_1100
20150401_1120    // contains event a
20150401_1140
20150401_1200    // contains event b
20150401_1220

Eu quero obter os arquivos de log contendo eventos, ou seja, com o mesmo timestamp do evento ou o timestamp anterior mais próximo. Existe algum comando ou truque para fazer isso de forma eficiente?

Com eficiência, quero dizer, não ter que escrever muito. :)

    
por Erik 01.04.2015 / 11:34

1 resposta

2

Vamos chamar ue do arquivo com registros de data e hora do evento e ul do arquivo com os registros.

Eu criei uma maneira muito intuitiva:

( awk '{printf "%s a\n",$1 }' ul ; awk '{printf "%s b\n",$1 }' ue ) |\
 sort |\
 awk '/b/ { print before ;} /a/ { before=$1 ;} '

Qual

  • adiciona uma tag à lista de eventos e registros de data e hora, você pode usar qualquer tag, mas a tag de arquivo de log deve vir antes da tag de evento. (*)
  • mescla por tipo.
  • o awk recupera o arquivo de log anterior.

O resultado é:

20150401_1120
20150401_1200

(*) Alguma opção inteligente sort pode ser usuário para classificar a coluna um por ordem crescente e a coluna dois por ordem decrescente (para colocar 'log' antes de 'evento' no caso de correspondência de data e hora)

    
por 01.04.2015 / 12:20