Chinaunix

标题: nginx日志的提取 [打印本页]

作者: changsiheng    时间: 2015-08-27 19:22
标题: nginx日志的提取
本帖最后由 changsiheng 于 2015-08-27 19:24 编辑

100.0.0.16 - - [27/Aug/2015:10:44:58 +0000] GET www HTTP/1.1 "200" 15 "-" "-" "-" "3.254" "192.168.1.1:80"

100.0.1.13 - - [27/Aug/2015:10:45:22 +0000] GET www HTTP/1.1 "200" 90 "-" "-" "-" "0.498" "192.168.1.1:80"

100.0.1.13 - - [27/Aug/2015:10:46:26 +0000] GET www HTTP/1.1 "200" 90 "-" "-" "-" "1.704" "192.168.1.1:80"

100.0.1.16 - - [27/Aug/2015:10:46:35 +0000] GET www HTTP/1.1 "200" 94 "-" "-" "-" "1.189" "192.168.1.1:80"

统计非200的数量


各位好,我想提取2015:10:44:00到2015:10:49:00,五分钟內的访问状态,这个语句应当如何操作



awk '$4 ~ '/*$start_time*/','/*$end_time*/' {print $0}' $logfile

本想说提取出时间先,但是发现时间我都提取不出来,真心求解,先谢谢各位了
作者: MMMIX    时间: 2015-08-27 19:53
回复 1# changsiheng


    恰当的分割加判断即可:

awk -vstart='2015:10:40:00' -vend='2015:10:50:00'  -F'/|\\s+|\\s*"\\s*' ' start <= $6 && $6 <= end && $12 != 200 '
作者: tuyajie    时间: 2015-08-28 09:52
  1. [jay.liu@aliCloud chinaUnix]$ awk -F'[/: \"]' '{print $6,$7,$8,$9,$16}' test.dat
  2. 2015 10 44 58 200
  3. 2015 10 45 22 200
  4. 2015 10 46 26 200
  5. 2015 10 46 35 200
  6. [jay.liu@aliCloud chinaUnix]$ cat test.dat
  7. 100.0.0.16 - - [27/Aug/2015:10:44:58 +0000] GET www HTTP/1.1 "200" 15 "-" "-" "-" "3.254" "192.168.1.1:80"
  8. 100.0.1.13 - - [27/Aug/2015:10:45:22 +0000] GET www HTTP/1.1 "200" 90 "-" "-" "-" "0.498" "192.168.1.1:80"
  9. 100.0.1.13 - - [27/Aug/2015:10:46:26 +0000] GET www HTTP/1.1 "200" 90 "-" "-" "-" "1.704" "192.168.1.1:80"
  10. 100.0.1.16 - - [27/Aug/2015:10:46:35 +0000] GET www HTTP/1.1 "200" 94 "-" "-" "-" "1.189" "192.168.1.1:80"
复制代码
再根据需求加工加工吧
作者: leijskg    时间: 2015-08-28 09:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: bikong0411    时间: 2015-08-28 10:11
  1. awk -F'[/ "]' '$6>="2015:10:44:00" && $6<="2015:10:49:00" && $13 != 200'
复制代码

作者: jason680    时间: 2015-08-28 10:29
回复 1# changsiheng

$ start_time="10:44:00"; end_time="10:46:00";awk -vst="$start_time" -vet="$end_time" '{t=$4;gsub(/^[^:]+:/,"",t);if(st<=t&&t<=et)print}' FILE
100.0.0.16 - - [27/Aug/2015:10:44:58 +0000] GET www HTTP/1.1 "200" 15 "-" "-" "-" "3.254" "192.168.1.1:80"
100.0.1.13 - - [27/Aug/2015:10:45:22 +0000] GET www HTTP/1.1 "200" 90 "-" "-" "-" "0.498" "192.168.1.1:80"

$ start_time="10:44:00"; end_time="10:49:00";awk -vst="$start_time" -vet="$end_time" '{t=$4;gsub(/^[^:]+:/,"",t);if(st<=t&&t<=et)print}' FILE
100.0.0.16 - - [27/Aug/2015:10:44:58 +0000] GET www HTTP/1.1 "200" 15 "-" "-" "-" "3.254" "192.168.1.1:80"
100.0.1.13 - - [27/Aug/2015:10:45:22 +0000] GET www HTTP/1.1 "200" 90 "-" "-" "-" "0.498" "192.168.1.1:80"
100.0.1.13 - - [27/Aug/2015:10:46:26 +0000] GET www HTTP/1.1 "200" 90 "-" "-" "-" "1.704" "192.168.1.1:80"
100.0.1.16 - - [27/Aug/2015:10:46:35 +0000] GET www HTTP/1.1 "200" 94 "-" "-" "-" "1.189" "192.168.1.1:80"

   
作者: changsiheng    时间: 2015-08-28 15:33
确实如您所说,之前可能是太着急,并且对日志结构也不是很明白,这上午又重新写了一下,算是稍微有了头绪,非常感谢回复 2# MMMIX


   
作者: changsiheng    时间: 2015-08-28 15:36
感谢,根据需求已经得到了想要的结果回复 3# tuyajie


   
作者: changsiheng    时间: 2015-08-28 15:37
感谢回复 4# leijskg


   
作者: changsiheng    时间: 2015-08-28 15:38
清晰明了回复 5# bikong0411


   
作者: baby_神    时间: 2015-08-28 17:16
  来学习下
作者: internethehe    时间: 2015-08-29 09:55
非常有用,学习了
作者: 聆雨淋夜    时间: 2015-08-29 22:45
grep "2015:10:4[4-9]" file|grep -vw "200"
作者: MMMIX    时间: 2015-08-29 23:20
回复 13# 聆雨淋夜


    HTTP/1.1 后面那个 200 才算数.
作者: 聆雨淋夜    时间: 2015-08-29 23:22
回复 14# MMMIX
grep "2015:10:4[4-9]" file|grep -vw "\"200\""


   
作者: MMMIX    时间: 2015-08-29 23:29
回复 15# 聆雨淋夜


    倒数第二个域, 或者是其他的地方也可能出现 "200"
作者: 聆雨淋夜    时间: 2015-08-29 23:35
回复 16# MMMIX
不好意思我对nginx的日志格式不太懂
grep "2015:10:4[4-9]" file|grep -v "HTTP/1.1 \"200\""

   
作者: MMMIX    时间: 2015-08-29 23:42
回复 17# 聆雨淋夜


    这个其实还是有问题的,因为协议并不见得就一定是 HTTP/1.1。按域判断在这里是最靠谱的,此处用 grep 并不合适。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2