我有大型日志文件,其中每条记录都以日期开头,格式如下:
[2014-10-06 07:03:49]
在特定时间段内最简单的方法是什么?
我想在特定的日期范围内进行grep,例如,从2014年10月6日到2014年10月8日的示例日期。
答案 0 :(得分:2)
如果您的格式类似[YYYY-MM-DD HH:MM:SS]
,则必须创建某种正则表达式,以涵盖您愿意grep
的日期。
例如,如果您只想过滤年份为2014年和第10个月的6到8天,您可以说:
grep '^\[2014-10-0[6-8]' file
这表示:获取所有以[2014-10-0
开头,后跟6,7或8的行。
$ cat a
[2014-10-06 07:03:49] line1
[2014-10-06 07:14:49] line2
[2014-10-06 07:03:49] line3
[2014-10-07 07:03:49] line4
[2014-10-08 07:09:49] line5
[2014-10-09 07:03:49] line6
[2015-01-11 07:03:49] line7
$ grep '^\[2014-10-0[6-8]' a
[2014-10-06 07:03:49] line1
[2014-10-06 07:14:49] line2
[2014-10-06 07:03:49] line3
[2014-10-07 07:03:49] line4
[2014-10-08 07:09:49] line5
答案 1 :(得分:1)
我不会使用grep
,我会使用awk
。
awk -v from="[2014-10-20 00:00:00]" -v to="[2015-01-02 23:59:59]" '
{datetime = $1 " " $2}
from <= datetime && datetime <= to
' file
祝贺您使用合理的可排序日期时间格式。