【问题标题】:shell script/command line to read most recent timestamp from a log file用于从日志文件中读取最新时间戳的 shell 脚本/命令行
【发布时间】:2012-02-02 18:54:41
【问题描述】:

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

事件有时会乱序到达,有时会延迟几个小时,因为它们会在中断时被缓冲,所以我不能只看日志文件的底线。

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

有人有脚本可以做到这一点吗?

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

【问题讨论】:

    标签: shell unix


    【解决方案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
    

    【讨论】:

    • 适用于您的示例日期格式。但会失败:例如:02.11.2012 00:00:00 和 25.10.1999 00:00:00。 OP 应该给出日期模式。如果能按日期cmd转成ms就好了。
    【解决方案2】:

    我想您的时间戳采用“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
    

    sort 之前使用LANG=C,因为sort 的行为可能因当地人而异。

    【讨论】:

      猜你喜欢
      • 2019-07-26
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      相关资源
      最近更新 更多