1.1.1 获取日志的最大top10,排序

获取两列到新的文件中第一次处理

sed截取字符串中间的内容,sed不支持贪婪匹配.找出图片在的列和图片大小到test1文件

本题需要输出三个指标:【访问次数】【访问次数*单个文件大小】【文件名(可以带URL)】

测试数据

59.33.26.105 --[08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/2.jpgHTTP/1.1" 200 11299 "http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"

59.33.26.105 --[08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/2.jpgHTTP/1.1" 200 11299"http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"

59.33.26.105 --[08/Dec/2010:15:44:02 +0800] "GET /static/flex/vedioLoading.swfHTTP/1.1" 200 3583"http://oldboy.blog.51cto.com/static/flex/AdobeVideoPlayer.swf?width=590&height=328&url=/[[DYNAMIC]]/2" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"

124.115.4.18 --[08/Dec/2010:15:44:15 +0800] "GET /?=HTTP/1.1" 200 46232 "-" "-"

124.115.4.18 --[08/Dec/2010:15:44:25 +0800] "GET /static/js/web_js.jsHTTP/1.1" 200 4460 "-" "-"

124.115.4.18 --[08/Dec/2010:15:44:25 +0800] "GET /static/js/jquery.lazyload.jsHTTP/1.1" 200 1627 "-" "

============================答题步骤

s sed截取字符串中间的内容,sed不支持贪婪匹配.找出图片在的列和图片大小到test1文件

sed -rn 's/.*GET (.*) HTTP.*200 (.*) /\1 \t \2/gp' bb.txt >>test1.txt

/static/images/photos/2.jpg      11299

/static/images/photos/2.jpg      11299

/static/flex/vedioLoading.swf    3583

/?=      46232 "-" "-"

/static/js/web_js.js     4460 "-" "-"

/static/js/jquery.lazyload.js    1627 "-" "-"

awk -F " " '{print $2}' test1.txt |sort -nr  对数字列进行倒序排序

uniq -c 对每行进行计数

awk -F " " '{print $1"\t"$2}' test1.txt |sort -n|uniq -c>test2.txt #第二次处理

1 /?=     46232

1 /static/flex/vedioLoading.swf   3583

2 /static/images/photos/2.jpg     11299

1 /static/js/jquery.lazyload.js   1627

1 /static/js/web_js.js    4460

[root@ob data]# awk -F " " '{print (($1*$3))"\t" $2}' test2.txt|sort -nru     #最后合并排序

46232   /?=

22598   /static/images/photos/2.jpg

4460    /static/js/web_js.js

3583    /static/flex/vedioLoading.swf

1627    /static/js/jquery.lazyload.js

======================================================#sed

awk -F"GET |HTTP/1.1|200 " '{print $2,$4}' /data/bb.txt

/static/images/photos/2.jpg  11299

/static/images/photos/2.jpg  11299

/static/flex/vedioLoading.swf  3583

/?=  46232 "-" "-"

/static/js/web_js.js  4460 "-" "-"

/static/js/jquery.lazyload.js  1627 "-" "-"

[root@ob1 mytmp]# awk -F"GET |HTTP/1.1|200 " '{TP[$2]++}END{for (i in TP) print i,TP[i]}' /data/bb.txt

7

/static/js/jquery.lazyload.js  1

/static/flex/vedioLoading.swf  1

/?=  1

/static/images/photos/2.jpg  2

/static/js/web_js.js  1

#逻辑错误掉坑里写法,awk的特性是按行取数据,前一个数据会将第一个顶掉,所以在END时候只有最后一个数据,

[root@ob1 mytmp]# awk -F"GET |HTTP/1.1|200 " '{TP[$2]++}END{for (i in TP) print i,TP[i],$4}' /data/bb.txt|awk -F ' '  '{print $2*$3,$1}'|sort -nrk1

3254 /static/images/photos/2.jpg

1627 /static/js/web_js.js

1627 /static/js/jquery.lazyload.js

1627 /static/flex/vedioLoading.swf

1627 /?=

0 7

===================================================

第一步查看第二列

[root@ob1 data]# awk -F"GET | HTTP"  '{print $2}' bb.txt

/static/images/photos/2.jpg

/static/images/photos/2.jpg

/static/flex/vedioLoading.swf

/?=

/static/js/web_js.js

/static/js/jquery.lazyload.js

第二步 属组取出

[root@ob1 data]# awk -F"GET | HTTP|200 | \"-"  '{tt[$2]++}END{for (i in tt)print i,tt[i]}' bb.txt

7

/?= 1

/static/js/web_js.js 1

/static/images/photos/2.jpg 2

/static/flex/vedioLoading.swf 1

/static/js/jquery.lazyload.js 1

第三步再次定义一个数组存放第三列,size[$2]+=$3,又买一个筐子存放第三列,可以使用相同的数组下表应为每一列相同

[root@ob1 data]# awk -F"GET | HTTP/1.1\" 200 | \"\-" '{aa[$2]++;size[$2]+=$3}END{for (i in aa)print aa[i],i,size[i]}' bb.txt

awk: warning: escape sequence `\-' treated as plain `-'

7  0

1 /?= 46232

1 /static/js/web_js.js 4460

2 /static/images/photos/2.jpg 22598

1 /static/flex/vedioLoading.swf 3583

1 /static/js/jquery.lazyload.js 1627

第三步计算排序

[root@ob1 data]# awk -F"GET | HTTP/1.1\" 200 | \"\-" '{aa[$2]++;size[$2]+=$3}END{for (i in aa)print i,aa[i]*size[i]}' bb.txt|sort -nk 2

awk: warning: escape sequence `\-' treated as plain `-'

0

/static/js/jquery.lazyload.js 1627

/static/flex/vedioLoading.swf 3583

/static/js/web_js.js 4460

/static/images/photos/2.jpg 45196

/?= 46232

================================

第一关练习题统计网站最大访问量sed法,隐藏知识数组下标不能重复的更多相关文章

  1. PHP文件操作,多行句子的读取,file()函数,file_get_contents()函数,file_put_contents()函数,is_file,统计网站pv (访问量),文件的复制 copy,文件重命名 rename,删除文件 unlink

    php中添加utf-8: header("Content-type:text/html;charset='UTF-8'"); 文件操作步骤: 1.在同一目录下建立一个file.tx ...

  2. PHP统计网站pv(访问量)

    //首先判断有没有统计的文件 if(is_file("pv.txt")){//有 //取文件里面的值 $count=file_get_contents("pv.txt&q ...

  3. 统计网站访问量,以GD2库图像形式输出

    index.php页面<?php session_start(); if($_SESSION[temp]==""){ //判断$_SESSION[temp]=="& ...

  4. js实现精确统计网站访问量的代码分享

    JS 精确统计网站访问量. 代码如下: /** * vlstat 浏览器统计脚本 */ var statIdName = "vlstatId"; var xmlHttp; /** ...

  5. 如何实现对网站页面访问量的统计(javaweb和php)

    如何实现对网站页面访问量的统计(javaweb和php) 一.总结 一句话总结:其实很简单啦,每访问一次那个页面对应的index函数(控制器中的那个函数)访问次数就加1就可以了. 1.javaweb中 ...

  6. 《ASP.NET1200例》统计网站访问量源代码

    void Application_Start(object sender, EventArgs e)     {        //在应用程序启动时运行的代码        int count=0;  ...

  7. hugo建站 | 我的第一个博客网站

    前言 博客地址 - https://billie52707.cn 1. 建博客的初衷? 2020那一年,八月的第一天,我还是像往常一样打开我的域名网站,本以为还是会像以前一样显示每日一图的界面,结果出 ...

  8. 监听器应用【统计网站人数、自定义session扫描器、踢人小案例】

    从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器.这篇博文主要讲解的是监听器的应用. 统计网站在线人数 分析 我们在网站中一般使用Session来标识某用户是否登陆了,如果登陆了, ...

  9. php特级课---1、网站大访问量如何解决

    php特级课---1.网站大访问量如何解决 一.总结 一句话总结: 负载均衡和冗余技术 1.负载均衡和冗余技术是一回事么? 并不是:负载均衡是用户分流:冗余技术是避免出现单点故障 负载均衡:将不同的用 ...

随机推荐

  1. PowerDesigner删除外键关系,而不删除外键列[转]

    PowerDesigner中配置外键关系时,如果要删除配置的外键关系,默认设置会一同删除外键列. 要更改此设置,需在菜单栏tools中打开Model Options,在Model Settings中点 ...

  2. C#封装百度Web服务API处理包含(Geocoding API,坐标转换API)

    1.创建基础参数类 public static class BaiduConstParams { public const string PlaceApIv2Search = "http:/ ...

  3. Linux时间子系统(六) POSIX timer

    一.前言 在用户空间接口函数文档中,我们描述了和POSIX timer相关的操作,主要包括创建一个timer.设定timer.获取timer的状态.获取timer overrun的信息.删除timer ...

  4. Java+Oracle实现事务——JDBC事务

    J2EE支持JDBC事务.JTA事务和容器事务事务,这里说一下怎样实现JDBC事务. JDBC事务是由Connection对象所控制的,它提供了两种事务模式:自己主动提交和手动提交,默认是自己主动提交 ...

  5. Python 列表 pop() 方法

    描述 Python 列表 pop() 方法通过指定元素的索引值来移除列表中的某个元素(默认是最后一个元素),并且返回该元素的值,如果列表为空或者索引值超出范围会报一个异常. 语法 pop() 方法语法 ...

  6. 定时器quartz工具类

    一.gradle配置 // https://mvnrepository.com/artifact/org.quartz-scheduler/quartz compile group: 'org.qua ...

  7. js面向对象编程:this究竟代表什么?

    在js中this的使用方法非常让人迷惑.有些像Java或者C#中的this,但又不全然一样.依照流行的说法this总是指向调用方法的对象. 1.纯粹函数调用. function ListCommon2 ...

  8. python列表推导式详解 列表推导式详解 字典推导式 详解 集合推导式详解 嵌套列表推导式详解

    推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,简化代码,速度快等优点.推导式包括:1.列表推导式2.字典推导式3.集合推导式4.嵌套列表推导式注意: 字典和集合推导是最近才加入到Pyt ...

  9. 在Visual Studio 2012中使用XNA 4.0

    XNA 4.0默认是将项目模板安装到VS2010中的,并不能够自动安装到VS2012,所以需要一些操作来让VS2012中也可以使用XNA 4.0模板. 1.下载XNA 4.0 下载地址:http:// ...

  10. Ambari-stack介绍

    Ambari-stack总体介绍 Ambari-stack 表示hadoop某个发行版本号.比如HDP-1.0.0,在用ambari创建一个集群时,首先要通过调用restfulAPI设置stack版本 ...