【问题标题】:Filter Linux logs based on Unix Timestamp根据 Unix 时间戳过滤 Linux 日志
【发布时间】:2015-10-07 19:28:28
【问题描述】:

我在 linux 服务器上有一个日志。条目格式为:

[时间戳(自 1970 年 1 月 1 日以来的秒数)] 日志数据条目

我需要一个 bash 脚本,它将获取日志文件的名称并仅输出昨天的条目(从前一天的 12:00 到 23:59:59)并将这些行输出到新文件。

我见过各种基于日期过滤日志的脚本,但到目前为止,所有这些脚本都以更易于阅读的格式处理日期戳,或者不是动态的。他们依赖硬编码的日期。我想要一个每天在 cron 作业中运行的脚本,因此它必须知道每次运行时的当前日期。

谢谢。

更新:这是我目前所拥有的。它似乎从来没有对日期进行评估。它为日期打印 00,以便一切顺利。

head -5 logfile.log | awk '{
    if($1 >= (date -d "today 00:00:00" +"%s")) 
        print $1 (date -d "today 00:00:00" +"%s");
    }' 

我很困惑,即使日期计算正确,$1 也会在方括号内包含数字,而我的日期将只是数字。如果字符串的格式不同,它会正确进行比较吗?我还没有想出如何将 date 返回的日期数字放入带括号的字符串中。

【问题讨论】:

  • 你会对date -d "yesterday 00:00:00"和date -d "yesterday 23:59:59"感兴趣
  • 我推荐@glennjackman的回答,结合awk conditionals
  • 我建议添加日期选项+"%s"。
  • 我已经更新了我的问题,但我认为你们低估了我在 Linux 脚本编写方面的菜鸟水平。

标签: linux bash


【解决方案1】:

好吧,也许像戴尔所说的那样使用日期。但是使用一个小技巧来提取“[”和“]”,然后比较日期。像这样的:

YESTERDAY=$(date -d "yesterday 00:00:00" +"%s")
TODAY=$(date -d "today 00:00:00" +"%s")

# Combine the processing in awk
awk -v MIN=${YESTERDAY} -v MAX=${TODAY} -F["]""["] '{  if ( $2 >=  MIN && $2 <= MAX) print $0}' logfile.log

【讨论】:

  • 最后我协商避免过滤日志,只使用 logrotate 创建的备份每周一次,但我测试了这个答案,它似乎有效。非常感谢!
【解决方案2】:

结合 Glenn、Dale 和 Davison 的提示和技巧:

awk -v today=$(date -d "today 00:00:00" +"%s") -v yesterday=$(date -d "yesterday 00:00:00" +"%s") -F'[\\[\\] ]' '{ if($2 &gt;= yesterday &amp;&amp; $2 &lt; today) print }' logfile.log

使用 shell 的 $() 命令替换将变量提供给 awk 的 -v 参数解析器
-F'[\\[\\] ]' 将字段分隔符设置为 [、] 或

输入数据:

[1300000000 log1 data1 entry1]
[1444370000 log2 data2 entry2]
[1444374000 log3 data3 entry3]
[1444460399 log4 data4 entry4]
[1500000000 log5 data5 entry5]

输出:

[1444370000 log2 data2 entry2]

【讨论】:

    【解决方案3】:

    你可以试试这样的:

    YESTERDAY=$(date -d "yesterday 00:00:00" +"%s")  
    TODAY=$(date -d "today 00:00:00" +"%s")
    
    cat your_log.log | \  
    awk -v MIN=${YESTERDAY} -v MAX=${TODAY} \
    '{if($1 >= MIN && $1 < MAX) print}'  
    

    :)
    戴尔

    【讨论】:

      猜你喜欢
      • 2018-09-11
      • 2018-07-17
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多