最近需要一份这两天的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/……
# 然后取这两个时间段之间的记录
评论列表:
paper代写
评论于2017-06-26 15:26:53
感谢楼主的分享 - 回复该评论
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
相关文章
txt字符串指定长度换行2023-05-13
Nginx日志按天分割并定时清理脚本(无需重启Nginx)2018-04-16
利用mysql二进制日志进行mysql数据库的恢复2014-03-25