【问题标题】:Grep log file greater than time stampGrep 日志文件大于时间戳
【发布时间】:2014-04-29 05:10:03
【问题描述】:

我有一个 unix 日志文件 (application.log),它的日志开始时带有时间戳。我需要在此日志文件中搜索大于时间 2014-03-20 14:05:54 的“已发送”模式。

2014-03-20 14:05:54,038 [NfxAgent....
2014-03-20 14:05:54,164 [NfxAgent....
2014-03-20 14:05:54,298 [NfxAgent....
2014-03-20 14:05:54,414 [NfxAgent....
2014-03-20 14:05:54,787 [NfxAgent....

【问题讨论】:

标签: unix sed awk grep


【解决方案1】:

试试:

sed -n '/^2014-03-20 14:05:54/,$ {/sent/p;}' file

注意:这假定您的日志文件中至少有 1 行实际上以 2014-03-20 14:05:54 开头,并且可以及时包含从那一秒开始的匹配项。

如果不能保证这样一行的存在,@shellter 的awk 方法更胜一筹;把它放在一起:

awk '$0 > "2014-03-20 14:05:54" && $0 ~ "sent"' file

【讨论】:

    【解决方案2】:

    我在测试数据中添加了另外 2 条记录以确保这确实有效:

    2014-03-19 14:05:53,999 [NfxAgent....
    2014-03-20 14:05:53,164 [NfxAgent....
    

    但我认为您不能为此使用grep。这是一个 awk 解决方案:

    $ grep sent  grepTest_20140321.txt|  awk '$0 > "2014-03-20 14:05:54"' 
    2014-03-20 14:05:54,038 [NfxAgent....
    2014-03-20 14:05:54,164 [NfxAgent....
    2014-03-20 14:05:54,298 [NfxAgent....
    2014-03-20 14:05:54,414 [NfxAgent....
    2014-03-20 14:05:54,787 [NfxAgent....
    

    编辑

    “如果我们需要以与 2014-03-21 10:04:14,018 相同的格式指定结束时间怎么办?”

    并且我添加了 3 行测试数据来确认第 2 种情况:

    2014-03-21 10:04:14,017 [NfxAgent....
    2014-03-21 10:04:14,018 [NfxAgent....
    2014-03-22 10:04:14,999 [NfxAgent....
    

    结果显示您指定范围内的一条新记录。

     awk '$0 ~ "sent" && $0 > "2014-03-20 14:05:54" && $0 < "2014-03-21 10:04:14,018"'    grepTest_20140321.txt
    2014-03-20 14:05:54,038 [NfxAgent....
    2014-03-20 14:05:54,164 [NfxAgent....
    2014-03-20 14:05:54,298 [NfxAgent....
    2014-03-20 14:05:54,414 [NfxAgent....
    2014-03-20 14:05:54,787 [NfxAgent....
    2014-03-21 10:04:14,017 [NfxAgent....
    

    IHTH

    【讨论】:

    • 如果我们需要像2014-03-21 10:04:14,018一样的格式指定结束时间怎么办?
    • +1 表示awk '$0 &gt; "2014-03-20 14:05:54"',但您缺少对模式“已发送”的额外搜索。
    • 查看编辑以获取解决方案。确切地说,您将在第二个条件下将 ,018 更改为 019 或用户 &lt;=。祝你好运。
    • @mklement0 :我已经为您的案例更新了我的原始答案,并为您的好眼光+1,错过了。但是......它不在样本数据中。
    • @shellter:感谢您的更新;我还建议将"sent" 的搜索直接集成到awk 程序中,这样就不需要单独的grep 命令(如我的回答)。
    猜你喜欢
    • 2012-02-09
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    相关资源
    最近更新 更多