Chinaunix

标题: awk提取日志时间问题,请教! [打印本页]

作者: daxian195    时间: 2009-08-21 15:16
标题: awk提取日志时间问题,请教!
60.217.32.56 - - [22/Jul/2009:04:03:06 +0800] "GET /trade/pic_member.cgi?color=000000&id=26394957&digest=a6e5ba4c05ebe4ab5737f6eb37ba8cbe HTTP/1.0" 200 353 "http://china.toocle.com/bin/gen_check_t.cgi?1248206924671" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)"
59.51.114.14 - - [22/Jul/2009:04:03:06 +0800] "GET /bin/gen_check_t.cgi?1248206921576 HTTP/1.0" 200 58 "http://china.toocle.com/member/Trade.cgi?t=trade&f=add" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)"

日志都是上面的格式,我要提取时间和后面的流量并计算合并,写法如下:
cat $log|awk '{a[substr($4,2,17)]+=$10}END{for(i in a){print a,i}}'|head -n 5
结果却是:
19248466 22/Jul/2009:05:09
0
0 company-34c1-1.ht
0 admin/eWeb/kncead
0 detail--4695850.h

正常应该都是像每一行那样,数值加时间的,我知道是{a[substr($4,2,17)]这一部分的问题,我单独截取都是没问题的,但是放这里就不行了,肯定这样写不对,但不知正确应怎样写,还要请教各位高手讲解一下。不胜感激!
作者: nuclearxin    时间: 2009-08-21 15:22
........文件 的首航末行被加进去了被,额外加个正则统计标准格式的日志
作者: daxian195    时间: 2009-08-21 15:25
能否说的详细点,我shell很差的,最好有例子哈。
作者: blackold    时间: 2009-08-21 15:28
数据文件不规范吧。

应该是你贴出典型的数据文件,把问题说清楚些才是。
作者: nuclearxin    时间: 2009-08-21 15:30

  1. awk '{if(substr($4,1,1)=="["){ a[substr($4,2,17)]+=$10}}END{for(i in a){print a,i}}'
复制代码
  1. if(substr($4,1,1)=="[")
复制代码
加上这个条件 看看
作者: daxian195    时间: 2009-08-21 15:49
原帖由 nuclearxin 于 2009-8-21 15:30 发表

awk '{if(substr($4,1,1)=="["){ a[substr($4,2,17)]+=$10}}END{for(i in a){print a,i}}'

if(substr($4,1,1)=="[")加上这个条件 看看


还真是这样,加上之后出来的就很规范了。




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