使用shell / awk / sed 统计日志行数
时间:2011-05-15
来源:互联网
180.171.230.214 - - - [14/May/2011:20:28:10 +0800] "GET /promotion/gyp/20100602/maoyitong/index
180.171.230.215 - - - [14/May/2011:20:28:14 +0800] "GET /promotion/gyp/20100602/maoyitong/index
.....
.....
.....
110.75.196.130 - - - [14/May/2011:20:40:45 +0800] "GET / HTTP/1.1" 200 1
159.140.25.218 - - - [14/May/2011:20:28:50 +0800] "http://xxx.com"
117.121.32.185 - - - [14/May/2011:20:28:50 +0800] "GET /homepage-market-conditio
我想统计从 14/May/2011:20:28:10 到 14/May/2011:20:28:50 之间的所有日志行数,
使用 sed -n '/14\/May\/2011:20:28:10/,/14\/May\/2011:20:28:50 +0800/p' 只能打印 159.140.25.218 - - - [14/May/2011:20:28:50 +0800] "http://xxx.com" 这条,这条后的同样时间的就不打印了,
请问使用shell / sed / awk 应怎么写呢?
作者: dmidecode 发布时间: 2011-05-15
- awk '/14\/May\/2011:20:28:10/,/14\/May\/2011:20:28:50 +0800/' urfile
作者: Shell_HAT 发布时间: 2011-05-15
sed -n '/14\/May\/2011:20:28:10/,/14\/May\/2011:20:28:50 \+0800/p'
作者: yinyuemi 发布时间: 2011-05-15
作者: Estwind 发布时间: 2011-05-15
没有转义符+号是有特别意义的。
作者: zhnghaijin 发布时间: 2011-05-15
请问在前面为何不用加 +0800 ,在后面要加 +0800 这个呢,
我刚才试了一下,如果前面加 +0800 的话会任何东西都打印不出来!
作者: dmidecode 发布时间: 2011-05-15
回复 dmidecode
试试下面的吧,我前面的回复不对,另外sed里的+不需要转义,
因为不管是awk还是sed, /foo1/,/foo2/的匹配的是第一个foo1到第一个foo2(对这点,以前的理解还是不到位啊),这也就是为什么你开始的代码无法打印出最个那行;
- cat test
- abc
- 180.171.230.214 - - - [14/May/2011:20:28:10 +0800] "GET /promotion/gyp/20100602/maoyitong/index
- 180.171.230.215 - - - [14/May/2011:20:28:14 +0800] "GET /promotion/gyp/20100602/maoyitong/index
- .....
- .....
- .....
- 110.75.196.130 - - - [14/May/2011:20:40:45 +0800] "GET / HTTP/1.1" 200 1
- 159.140.25.218 - - - [14/May/2011:20:28:50 +0800] "http://xxx.com"
- 117.121.32.185 - - - [14/May/2011:20:28:50 +0800] "GET /homepage-market-conditio
- seg
-
-
- awk '/14\/May\/2011:20:28:10 \+0800/{p=1}/14\/May\/2011:20:28:50 \+0800/{print;p=0}p' test
- 180.171.230.214 - - - [14/May/2011:20:28:10 +0800] "GET /promotion/gyp/20100602/maoyitong/index
- 180.171.230.215 - - - [14/May/2011:20:28:14 +0800] "GET /promotion/gyp/20100602/maoyitong/index
- .....
- .....
- .....
- 110.75.196.130 - - - [14/May/2011:20:40:45 +0800] "GET / HTTP/1.1" 200 1
- 159.140.25.218 - - - [14/May/2011:20:28:50 +0800] "http://xxx.com"
- 117.121.32.185 - - - [14/May/2011:20:28:50 +0800] "GET /homepage-market-conditio
-
-
- sed -n '/4\/May\/2011:20:28:10 +0800/,/14\/May\/2011:20:28:50 +0800/{
- p
- /14\/May\/2011:20:28:50 +0800/{
- :a
- n
- /14\/May\/2011:20:28:50 +0800/p
- /14\/May\/2011:20:28:50 +0800$/! b
- ta
- }
- }' test
-
- 180.171.230.214 - - - [14/May/2011:20:28:10 +0800] "GET /promotion/gyp/20100602/maoyitong/index
- 180.171.230.215 - - - [14/May/2011:20:28:14 +0800] "GET /promotion/gyp/20100602/maoyitong/index
- .....
- .....
- .....
- 110.75.196.130 - - - [14/May/2011:20:40:45 +0800] "GET / HTTP/1.1" 200 1
- 159.140.25.218 - - - [14/May/2011:20:28:50 +0800] "http://xxx.com"
- 117.121.32.185 - - - [14/May/2011:20:28:50 +0800] "GET /homepage-market-conditio
作者: yinyuemi 发布时间: 2011-05-15
sed 和 awk 对于 /foo1/,/foo2/ 的处理是有区别的。
- $ cat urfile
- xxx
- foo1 foo2
- xxx
- foo2
- xxx
- $ sed -n '/foo1/,/foo2/p' urfile
- foo1 foo2
- xxx
- foo2
- $ awk '/foo1/,/foo2/' urfile
- foo1 foo2
作者: ly5066113 发布时间: 2011-05-15
多谢Tim兄指点,学习学习

作者: yinyuemi 发布时间: 2011-05-15
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28