【问题标题】:How to get all log lines between two time ranges?如何获取两个时间范围之间的所有日志行?
【发布时间】:2018-03-30 12:03:27
【问题描述】:

我的日志文件有这样的行:

2017/10/18 00:00:00 [WARNING]
2017/10/18 00:10:00 [WARNING]
2017/10/18 00:20:00 [WARNING]
2017/10/18 01:00:00 [WARNING]
2017/10/18 01:10:00 [WARNING]
2017/10/18 01:20:00 [WARNING]

例如,我想获取 2017/10/18 00:15:002017/10/18 01:15:00 之间的所有行。

我一直在尝试为此使用 grep 和 regex,但我找不到解决方案。我已经阅读了几个解决方案 (like this) 并了解了 awk。但似乎 awk 也需要一个正则表达式模式?

【问题讨论】:

  • 为什么不将每一行的日期时间转换为Datetime 对象,然后针对Datetime 对象进行测试以查看它是否在范围内?不需要为此使用正则表达式(除了提取日期时间),它更优雅一点
  • 回答后你是什么语言? unix/linux shell 或 PHP 上的东西?您的问题中有冲突的标签...
  • @Matt_S,我在 php 脚本上使用 exec(),所以我猜这两种解决方案都很好。
  • @ctwheels:请注意,您不需要在此处转换任何内容,因为日期和时间是以遵循“字母”顺序的格式编写的,并且每个值都用零填充。 (YYYY/MM/DD HH:MM:SS)
  • @CasimiretHippolyte 你是对的,在这种情况下字母顺序将起作用。对我的忽视

标签: php regex awk grep


【解决方案1】:

我会像这样使用awk

awk '$1" "$2>="2017/10/18 00:15:00" && $1" "$2<="2017/10/18 01:15:00"' file

您也可以使用变量作为开始和结束:

#!/bin/bash
BEGIN="2017/10/18 00:15:00"
END="2017/10/18 01:15:00"
awk -v begin="${BEGIN}" \
    -v end="${END}" \
    '$1" "$2>=begin && $1" "$2<=end' file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2019-03-24
    相关资源
    最近更新 更多