Chinaunix

标题: 请教:如何用awk处理这个访问列表记录文件? [打印本页]

作者: sbuddy    时间: 2010-05-14 22:14
标题: 请教:如何用awk处理这个访问列表记录文件?
Thu May 13 09:24:51 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:52 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:52 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:52 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:52 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:52 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:52 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:53 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:53 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:53 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:53 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:53 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:54 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:54 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:54 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:54 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:54 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:54 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:54 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:54 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:54 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:54 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:54 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:54 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:54 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:54 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:55 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:55 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:55 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:55 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:55 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:55 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:58 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:58 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:58 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:58 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:59 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:59 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:59 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:59 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:24:59 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:56:03 2010 192.168.18.179 http://abc.com.cn
Thu May 13 09:56:03 2010 192.168.18.179 http://abc.com.cn
Thu May 13 13:06:31 2010 192.168.18.179 http://cbd.com.cn/
Thu May 13 13:06:31 2010 192.168.18.179 http://cbd.com.cn/
Thu May 13 13:06:31 2010 192.168.18.179 http://cbd.com.cn/
Thu May 13 13:06:31 2010 192.168.18.179 http://cbd.com.cn/
Thu May 13 13:06:31 2010 192.168.18.179 http://cbd.com.cn/
Thu May 13 13:06:32 2010 192.168.18.179 http://cbd.com.cn/
Thu May 13 13:06:32 2010 192.168.18.179 http://cbd.com.cn/
Thu May 13 13:06:32 2010 192.168.18.179 http://cbd.com.cn/
Thu May 13 13:06:32 2010 192.168.18.179 http://cbd.com.cn/
Thu May 13 13:06:33 2010 192.168.18.179 http://cbd.com.cn/
Thu May 13 13:06:34 2010 192.168.18.179 http://cbd.com.cn/
Thu May 13 13:06:35 2010 192.168.18.179 http://cbd.com.cn/
Thu May 13 13:06:36 2010 192.168.18.179 http://cbd.com.cn/
Thu May 13 13:06:37 2010 192.168.18.179 http://cbd.com.cn/
Thu May 13 13:06:38 2010 192.168.18.179 http://cbd.com.cn/
Thu May 13 13:05:40 2010 192.168.18.179 http://efg.com.cn/
Thu May 13 13:06:40 2010 192.168.18.179 http://efg.com.cn/
Thu May 13 13:06:36 2010 192.168.18.179 http://efg.com.cn/
Thu May 13 13:06:37 2010 192.168.18.179 http://efg.com.cn/
Thu May 13 13:06:38 2010 192.168.18.179 http://efg.com.cn/
Thu May 13 13:06:40 2010 192.168.18.179 http://efg.com.cn/
Thu May 13 13:06:42 2010 192.168.18.179 http://efg.com.cn/


上面是一个访问记录,要求把对每个域名的从最早到最后的访问时间打印出来,格式如下:

09:24:51-09:56:03 http://abc.com.cn
13:06:31-13:06:38 http://cbd.com.cn/
13:05:40-13:06:42 http://efg.com.cn/

请问可以怎么做? 谢!
作者: lkk2003rty    时间: 2010-05-14 22:57
所有记录都是 当天的?
作者: lkk2003rty    时间: 2010-05-14 23:08
所有记录都是同一天的?如果是的话
  1. awk '{if(!($NF in min)) {min[$NF]=$4;max[$NF]=$4} else {if($4 > max[$NF]) max[$NF]=$4;if($4 < min[$NF]) min[$NF]=$4;}}END{for(i in min)print min[i],max[i],i}' file
复制代码

作者: where27    时间: 2010-05-15 10:24
  1. awk '!a[$7]++{min[$7]=$4}{max[$7]=$4}END{for(i in min)print min[i]"-"max[i],i}' file
复制代码

作者: lkk2003rty    时间: 2010-05-15 12:14
回复 4# where27


    估计这个是lz排完序的。。。所以访问时间排列得。。。。。
作者: where27    时间: 2010-05-15 12:31
回复 5# lkk2003rty


    没关系,没有排序用sort排一下就行了
作者: sbuddy    时间: 2010-05-15 16:53
回复 4# where27

  
谢谢! 这个文件是从squid access log简单处理后取得的,目的是想得到某个IP访问某个网站的开始和结束时间。一条访问网站记录可能是同一天的,但不同的记录就不是同一天了。


能简单解释一下吗? 不然还是知所然不知所以然啊,呵呵。
作者: where27    时间: 2010-05-15 17:34
回复 7# sbuddy


    这个写法的前提是文本已经排序过了(相同的网站按时间从早到晚依次排列),没有排序的话用sort排一下就行了。
简单说就是,从上往下浏览文本,当一个网站($7)第一次出现的时候,把时间($4)赋值给数组min[网站](就是最早的时间),同时也把时间($4)赋值max[网站](最晚时间),不同的是,相同网站的min[网站]后面就不会在变了,而max[网站]是一直在变的,直到网站($7)最后一次出现,max[网站]才固定为$4(因为后面已经没有相同的网站了,所以这个时间就是最晚的时间),后面就只要按格式打印就行了。

语言组织能力有点差,不知道明白没
作者: sbuddy    时间: 2010-05-15 19:52
回复  sbuddy


    这个写法的前提是文本已经排序过了(相同的网站按时间从早到晚依次排列),没有排序 ...
where27 发表于 2010-05-15 17:34


感谢! 果然是高手。学习了。
作者: sbuddy    时间: 2010-05-16 16:06
where27 发表于 2010-05-15 10:24


能否再请教一下,后面的for 循环看懂了,前面的awk '!a[$7]++{min[$7]=$4}{max[$7]=$4}能否简单解释一下结构,没太看懂,呵呵。
作者: where27    时间: 2010-05-17 10:02
回复 10# sbuddy
  1. !a[$7]++{min[$7]=$4}{max[$7]=$4}
复制代码
这个是由两部分组成。
!a[$7]++{min[$7]=$4}是第一部分,前面的!a[$7]++是模式部分,$7(网站)第一次出现的时候a[$7]=0,为假,!a[$7]为真,这时候就把$4赋值给数组min[$7](最早时间),同时a[$7]++后,a[$7]=1,当$7再出现的时候,a[$7]=1为真,!a[$7]为假,不执行后面的赋值语句,因此min[$7]不再变化,这样数组min[$7]的值就是最早时间。
{max[$7]=$4}是第二部分,这个部分没有模式,也就是默认模式都为真,每浏览一行文本都执行max[$7]=$4,也就是把$4赋值给数组max[$7](最晚时间),max[$7]一直在变化,直到$7最后一次出现,这个时候的$4就是最晚时间了,max[$7]不再变化,max[$7]=$4把最晚时间赋值给max[$7],数组max[$7]的值也就是最晚时间
作者: expert1    时间: 2010-05-17 10:15
xuexiele




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