如何在特定时间段内grep日志文件
我有一个日志文件,日志中的每一行都有一个日期,就像这样。
2012-03-06 11:34:48,657 blah blah blah...
我怎么才能grep
这个文件 只得到从早上8点到晚上11点的行?
我的目的是想统计从早上8点到晚上11点的错误数量。
我有一个日志文件,日志中的每一行都有一个日期,就像这样。
2012-03-06 11:34:48,657 blah blah blah...
我怎么才能grep
这个文件 只得到从早上8点到晚上11点的行?
我的目的是想统计从早上8点到晚上11点的错误数量。
egrep '^[^]+ (0[89]|1[0-9]|2[012]):'
详细解释可参见各种 regex (正则表达式)教程;egrep
使用 “POSIX扩展 "语法(man 7 regex
)。
第一个^
的意思是 "行的开始"。
[^]+
只是匹配日期字段,而不管实际日期。
(...|...|...)
意味着 "给定模式中的任何一种",所以(0[89]|1[0-9]|2[012])
意味着 ”0[89]
或1[0-9]
或2[012]
“。
一个更好的选项是:
awk -F'[:]' '$2 >= 8 && $2 <= 22 { print }'
-F
选项根据[:]
regex将每一行分割成独立的字段(匹配:
或空格),awk脚本检查第2列(小时)。
其实还有一个更简单的方法。
下载/文档。autodrgrep.kl.sh
命令:
./autodrgrep.kl.sh notchef /tmp/client.log '2016-05-08_08:00:00,2016-05-08_23:00:00' 'INFO' 'a2ensite' 5 10 -show
说明:
autodrgrep.kl.sh 是工具名称。
notchef是传递给工具的一个选项,用来告诉它该怎么做。在本例中,它告诉工具 /tmp/client.log 是什么类型的日志文件。
/tmp/client.log当然是日志文件。
2016-05-08/19:12:00,2016-05-08/21:13:00是你想扫描的日志中的日期范围
“INFO "是你感兴趣的日志行中的一个字符串。
"a2ensite "是您希望在同一行中找到 "INFO "字符串的另一个字符串。指定这两个字符串(INFO和a2ensite)可以更快地隔离和处理你想要的行,特别是当你要处理一个巨大的日志文件时。
5指定Warning。
5 表示警告。指定 5,就是告诉程序,如果你指定的搜索字符串至少有 5 次出现,就会以警告的形式发出警告。通过指定10,你告诉程序,如果你指定的搜索字符串至少出现10次,就会以 "关键 "警告。
-show 指定你会得到什么类型的响应。通过指定-shown,你表示如果发现任何符合指定模式的东西,就会输出到屏幕上。
运行示例:
# ./autodrgrep.kl.sh notchef /tmp/client.log '2016-05-08_19:12:00,2016-05-08_21:13:00' 'INFO' 'a2ensite' 5 10 -show
[2016-05-08 19:12:58-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 19:12:58-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 19:12:58-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 19:13:09-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 19:13:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 19:42:57-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 19:42:57-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 19:42:57-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 19:43:08-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 19:43:11-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 20:12:58-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 20:12:58-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 20:12:58-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 20:13:10-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 20:13:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 20:42:59-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 20:42:59-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 20:42:59-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 20:43:09-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 20:43:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 21:12:59-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 21:12:59-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 21:12:59-07:00] INFO: execute[a2ensite default] ran successfully
23
2---78720---23---ATWFILF---(2016-05-08)-(19:12)---(2016-05-08)-(21:13) SEAGM
如果用户指定的日期范围或时间框架不在日志中怎么办?
上述命令的每一次运行都会有一行(输出的最后一行)写着 "ATWFILF "或 "ETWNFILF"。
ATWFILF表示在日志中找到了你要求搜索的实际日期范围或时间框架。所以这是非常好的。
ETWNFILF 意味着您要求搜索的实际日期范围或时间框架没有在日志中找到。在这种情况下,将检测并使用与您指定的时间最接近的时间。