使用Bash从日志文件中选择时间间隔

时间:2010-08-24 12:10:49

标签: bash file shell logging

我需要使用shell脚本(bash)从日志文件中提取一些信息。日志文件中的一行通常如下所示:

2009-10-02 15:41:13,796| some information

有时候,这样的一行后面还会添加几行,提供有关该事件的详细信息。这些附加行没有特定格式(特别是它们不以时间戳开头)。

我知道如何使用grep根据关键字和表达式过滤文件。基本上我遇到的问题是,有时我只需要查看特定的时间间隔。例如,我只需要查看过去X分钟内发生的事件。我对shell脚本没有经验,但由于时间格式的复杂性,这对我来说似乎是一项相当困难的任务。另一方面,我可以想象这是不太常见的事情,所以我想知道是否有一些工具可以让我更容易,或者如果你能给我一些关于如何解决这个问题的提示?

3 个答案:

答案 0 :(得分:1)

gawk -F"[-: ]" 'BEGIN{
  fivemin = 60 * 60 * 5   #last 5 min
  now=systime()
  difference=now - fivemin
}
/^20/{
  yr=$1
  mth=$2
  day=$3
  hr=$4
  min=$5
  sec=$5
  t1=mktime(yr" "mth" "day" "hr" "min" "sec)
  if ( t1 >= difference) {
   print
  }
}' file

答案 1 :(得分:1)

  

基本上我遇到的麻烦是有时我需要看   仅限特定时间间隔。

您可以使用date为{1}}参数转换日期签名:

%s

有了它我们可以做一个小小的演示:

%s     seconds since 1970-01-01 00:00:00 UTC

请注意,这并未涉及未来的时间。

答案 2 :(得分:0)

您可能需要查看my Python program,它会根据一系列时间从日志文件中提取数据。日期的规范尚未实施(它的设计大致是最近的24小时)。它所期望的时间格式(例如1月14日04:10:13)看起来与你想要的有点不同,但可以进行调整。我没有使用非时间戳行测试它,但它应该在指定的时间范围内打印所有内容。

这将为您提供一些使用信息:

timegrep.py --help