这是我的日志文件的样子
[BCDID::16 T::LIVE_ANALYZER GCDID::16] {"t":"20:50:05","k":"7322","h":"178","s":-53.134575556764}
[BCDID::16 T::LIVE_ANALYZER GCDID::16] {"t":"20:50:06","k":"2115","h":"178","s":-53.134575556764}
[BCDID::16 T::LIVE_ANALYZER GCDID::16] {"t":"20:50:07","k":"1511","h":"178","s":-53.134575556764}
有多个条目相似的日志文件,它们每秒更新一次。
这里"t" : "20:50:05"
是时间。
我要做的是,从文件末尾获取所有文件在特定时间之间的所有日志。
我尝试使用tail files*.log | grep -e "20:50:07 | 20:50:05"
,但它不返回任何内容。
从所有日志文件的文件末尾开始,如何获取给定时间之间的所有日志条目?
答案 0 :(得分:0)
如果您正在寻找记录范围,并且行的格式是一致的,则最简单的方法可能是隔离时间字段,去除冒号并利用算术运算符的功能。
单线awk解决方案,例如:
tail files*.log | awk -v from="205006" -v to="205007" -F"\"" '{ timeasint=$4; gsub(":","",timeasint); if (timeasint >= from && timeasint <= to) print $0 }'
将帮助您:
[BCDID::16 T::LIVE_ANALYZER GCDID::16] {"t":"20:50:06","k":"2115","h":"178","s":-53.134575556764}
[BCDID::16 T::LIVE_ANALYZER GCDID::16] {"t":"20:50:07","k":"1511","h":"178","s":-53.134575556764}
当然您不能跨越午夜(即25:59:59-00:00:01),但是为此,无论如何您都需要日期和时间在日志中。
如果您有日期,我的建议是将它们转换为时代邮票(使用date -d“ string”或其他合适的方法),然后将时代邮票比较为整数。