截取指定时间段内svn的访问日志

2016-12-09 浏览:805
截取指定时间段内svn的访问日志
评论:(1)复制地址

最近需要一份这两天的svn日志,svn管理员给我一个足足18G的 access.log 。请我帮她导一下,太大了 她实在搞不定!!


直入正题

SVN日志格式为:

1**.168.10.* - admin [17/Nov/2016:17:00:50 +0800] "PROPFIND /svn/root/!svn/bc/90856 HTTP/1.1" 207 420
1**.168.10.* - admin [17/Nov/2016:17:00:50 +0800] "PROPFIND /svn/root/!svn/bc/90856 HTTP/1.1" 207 4310
1**.168.10.* - admin [17/Nov/2016:17:00:50 +0800] "PROPFIND /svn/root/!svn/bc/90856 HTTP/1.1" 207 1269
1**.168.10.* - admin [17/Nov/2016:17:00:50 +0800] "PROPFIND /svn/root HTTP/1.1" 207 647
1**.168.10.* - admin [17/Nov/2016:17:00:50 +0800] "PROPFIND /svn/root/!svn/vcc/default HTTP/1.1" 207 402
1**.168.10.* - admin [17/Nov/2016:17:00:50 +0800] "PROPFIND /svn/root/!svn/bln/90856 HTTP/1.1" 207 461
1**.168.10.* - admin [17/Nov/2016:17:00:50 +0800] "PROPFIND /svn/root HTTP/1.1" 207 647


截取命令:

sed -n '/17\/Nov\/2016:17:00:50/,/18\/Nov\/2016:10:59:58/p' access.log > access.log.2016.11.17-18


注:需要注意的是如果起始时间在日志中不存在,则整个截取将返回 0 行结果。而如果结束时间在日志中不存在,则会截取到日志的最后一条。所以在截取前得要找到最日志中最合适的起始点和结束点。


先使用grep去找到两个点  再使用sed去截取

# 找出 2016-11-17 17点第一条记录的时间

grep '17/Nov/2016:17' access.log | head -1
1**.168.10.* - admin [17/Nov/2016:17:00:50 +0800] "PROPFIND /svn/root HTTP/1.1" 207 647


# 找出 2016-11-18 10点最后一条记录的时间

grep '18/Nov/2016:10' access.log | tail -1
1**.168.10.* - - [18/Nov/2016:10:59:58 +0800] "OPTIONS /svn/root/……


# 然后取这两个时间段之间的记录

评论:(1)复制地址
发布:zpblog | 分类:Other | Tags:日志

评论列表:

paper代写

评论于2017-06-26 15:26:53
感谢楼主的分享 - 回复该评论

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。