我有一系列代表事件的时间戳,例如:
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
选择可能是用户按升序对第一列进行排序,按降序对第二列进行排序(在时间戳匹配的情况下将“日志”放在“事件”之前)