shell脚本/命令行,用于从日志文件中读取最新的时间戳

时间:2012-02-02 18:54:41

标签: shell unix

我有一个包含事件时间戳的日志文件。我希望从日志文件中获取最新的时间戳,并在写入日志文件时更新此编号。

这些事件有时会无序发生,有时只需要几个小时,因为它们会在出现中断时被缓冲,所以我不能只拿下日志文件的底线。

我正在考虑在日志文件上运行tail -f|grep,将输出汇总到date的某个变体以将格式化时间转换为Unix纪元时间,并将其传递给将记住的脚本到目前为止看到的最多数字。

有没有人会有这样做的脚本?

编辑:日期格式为YYYY-MM-DD HH:MM:SS,即2012-02-02 04:15:15

2 个答案:

答案 0 :(得分:1)

打印当前最大值:

$ tail -F youfile.log |
> awk 'NR == 1 {max=$0; print max} $0 > max {max = $0; print max}' 

实施例

$ printf "2010-10-01 01:02:02 a
2010-09-30 02:03:04 b\n2010-08-29 01:02:02 c\n2010-10-01 01:02:03 d\n" |
> awk 'NR == 1 {max=$0; print max} $0 > max {max = $0; print max}'

输出

2010-10-01 01:02:02 a
2010-10-01 01:02:03 d

答案 1 :(得分:0)

我认为您的时间戳格式为'YYYY-MM-DD HH:MM:SS'或类似内容。

watch 'tail -n 20 yourfile.log | LANG=C sort | tail -n 1'

或者如果您希望查看历史记录:

while true
do
  tail -n 20 yourfile.log | LANG=C sort | tail -n 1
  sleep 2
done

LANG=C之前使用sort,因为sort的行为可能会有所不同,具体取决于您的当地人。