匹配最接近的相等或之前的时间戳

匹配最接近的相等或之前的时间戳

我有一系列代表事件的时间戳,例如:

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

以及一系列日志文件,每个日志文件代表一个固定的时间段,并带有该时间段开始的时间戳,例如:

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

给出:

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

我想获取包含事件的日志文件,即具有与事件相同的时间戳或最接近的先前时间戳。是否有一些命令或技巧可以有效地做到这一点?

高效我的意思是不必写很多。 :)

答案1

让我们调用ue带有事件时间戳的文件和ul带有日志的文件。

我想出了一个非常直观的方法:

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

哪个

  • 将标签添加到事件和时间戳列表中,您可以使用任何标签,但日志文件标签必须位于事件标签之前。 (*)
  • 按排序合并。
  • awk 检索以前的日志文件。

结果是:

20150401_1120
20150401_1200

(*) 一些聪明的sort选择可能是用户按升序对第一列进行排序,按降序对第二列进行排序(在时间戳匹配的情况下将“日志”放在“事件”之前)

相关内容