我需要使用shell脚本(bash)从日志文件中提取一些信息。日志文件中的一行通常如下所示:
2009-10-02 15:41:13,796| some information
有时候,这样的一行后面还会添加几行,提供有关该事件的详细信息。这些附加行没有特定格式(特别是它们不以时间戳开头)。
我知道如何使用grep根据关键字和表达式过滤文件。基本上我遇到的问题是,有时我只需要查看特定的时间间隔。例如,我只需要查看过去X分钟内发生的事件。我对shell脚本没有经验,但由于时间格式的复杂性,这对我来说似乎是一项相当困难的任务。另一方面,我可以想象这是不太常见的事情,所以我想知道是否有一些工具可以让我更容易,或者如果你能给我一些关于如何解决这个问题的提示?
答案 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