Coincide con la timestamp igual o anterior más cercana

Tengo una serie de marcas de time que representan events, por ejemplo:

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

Y una serie de files de logging, cada uno representando un período fijo de time y marcado con el comienzo de ese período, por ejemplo:

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

da:

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

Quiero get los files de logging que contienen events, es decir, con la misma timestamp que el evento o la timestamp anterior más cercana. ¿Hay algún command o truco para hacer esto de manera eficiente?

Con eficiencia, me refiero a no tener que escribir mucho. 🙂

Llamemos al file con las marcas de time del evento y al file con los loggings.

Se me ocurrió una forma muy intuitiva:

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

Cual

  • agrega una label a la list de events y marcas de time, puede usar cualquier label, pero la label de file de logging debe venir antes de la label de evento. (*)
  • se fusiona por tipo.
  • awk recupera el file de logging anterior.

El resultado es:

 20150401_1120 20150401_1200 

(*) alguna opción de sort inteligente puede ser que el usuario clasifique la columna uno por order ascendente y la columna dos por order descendente (para poner 'log' antes de 'evento' en caso de que la timestamp coincida)

    Intereting Posts