专栏首页用户2442861的专栏2015百度一道面试题引发的思考(shell脚本和网络)

2015百度一道面试题引发的思考(shell脚本和网络)

原文    http://blog.csdn.net/chhuach2005/article/details/40044863

前言

        百度2面出了这样一题(前篇博文求职之路中有提到),给你一个log文件,文件中有3列,分别为ip,访问时间, 和访问内容。你用shell脚本找出访问频率最高的10个IP。

        因为平时用shell脚本也就是配置些文件,自动化部署一些软件,突然遇到这个问题。还真不知道怎么弄呢,反正知道要排序,当时就没答出来。回来在网上找了下,网上有很多类似的解答。下面给出几种解答方式,一一道来啊。

一、log格式分析

        就利用ubuntu httpserver 安装配置(apache+mysql+php) 中部署的httpsever产生的log文件,目录为:/var/log/apache2/access.log .log格式如图1所示

图1 httpseverlog格式

二、解答

解答一

shell脚本:cat   /var/log/apache2/access.log | awk -F -  '{print $1}' | sort | uniq -c | sort -rn

或者直接:awk -F -  '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -rn

awk -F -  '{print $1}'  是一行中以-为分隔符打印第一列;

sort  排序(默认是升序,降序用sort  -r);

uniq -c 计数并去重(仅去重用uniq即可)

sort -rn 以计数降序排序

结果如图2所示第一列为访问次数 第二列是ip;

图2  找出访问量最大的几个IP

解答二

shell 脚本:cut  -d- -f 1 /var/log/apache2/access.log |sort| uniq -c | sort -rn | head -10

cut -d- -f 1 /var/log/apache2/access.log  其中-d-表示以 - 为分隔符; -f 1表示打印第一列

后面的和解答1都一样 无需解释,结果和解答一完全一样。

三、补充

下面再补充一点啊

1)列出某一ip访问了哪些页面

grep ^223.3.52.172  /var/log/apache2/access.log | awk '{print $1,$7}' | head -30

说明^223.3.52.172 表示以该ip开始的一行,后面的上面都解释过了

结果如图3所示

图3  某一ip访问过的页面

某一页面被访问的次数:grep "/file1"  /var/log/apache2/access.log  | wc -l

ip访问总量 :awk -F -  '{print $1}'  /var/log/apache2/access.log | wc -l 

参考 http://www.jb51.net/article/53954.htm学习并列举一下哈

 1、查看当天有多少个IP访问:
 awk '{print $1}' log_file|sort|uniq|wc -l
 2、查看某一个页面被访问的次数;
 grep "/index.php" log_file | wc -l
 3、查看每一个IP访问了多少个页面:
 awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file
 4、将每个IP访问的页面数进行从小到大排序:
 awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n
 5、查看某一个IP访问了哪些页面:
 grep ^111.111.111.111 log_file| awk '{print $1,$7}'
 6、去掉搜索引擎统计当天的页面:
 awk '{print $12,$1}' log_file | grep ^\"Mozilla | awk '{print$2}' |sort | uniq | wc -l
 7、查看2009年6月21日14时这一个小时内有多少IP访问:
 awk '{print $4,$1}' log_file | grep 21/Jun/2009:14 | awk '{print$2}'| sort | uniq | wc -l

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CMake示例教程三

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

    bear_fish
  • Python-OpenCV 处理图像(一):基本操作

    第一种方式使用cv2.cv的LoadImage、ShowImage和SaveImage函数

    bear_fish
  • Quartz Spring与Spring Task总结

    Spring对Quartz作了一个封装,同时,Spring自己也提供了一个任务定时器(spring-task),现把它总结一下。 对于Quartz,我们使...

    bear_fish
  • 浅析 InnoDB Redo Log

    | 作者:陈俊熹,腾讯云数据库研发工程师,主要负责腾讯云MySQL数据库研发工作。 ---- 导语:之前的文章(见本文末)已经介绍了 InnoDB 的部分内外...

    腾讯云数据库 TencentDB
  • shell脚本快速入门之-----函数

    函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高。像其他编程语言一样,shell也支持函数。shell函数必须先定义后使用

    不吃小白菜
  • 生产环境日志清理脚本

    生产上有40多个微服务部署的应用,每个应用都会产生日志,随着时间的增长,日志量不断增大,现需要清理。有两个重要的应用日志需保留90天,其它应用保留20天。

    loong576
  • 每个程序员都应该收藏的算法复杂度速查表

    这篇文章覆盖了计算机科学里面常见算法的时间和空间的大 O(Big-O)复杂度。我之前在参加面试前,经常需要花费很多时间从互联网上查找各种搜索和排序算法的优劣,以...

    哲洛不闹
  • 每个程序员都应该收藏的算法复杂度速查表

    算法复杂度这件事 这篇文章覆盖了计算机科学里面常见算法的时间和空间的大 O(Big-O)复杂度。我之前在参加面试前,经常需要花费很多时间从互联网上查找各种搜索和...

    用户1667431
  • [log.js]一个node端带文件路径和颜色的console.log

    开发node.js的时候,习惯用console.log老打印一些信息,然而node端的console.log并没有浏览器里的功能那么强。

    前端博客 : alili.tech
  • Python_列表解析【i for循环 if i】

    瑞新

扫码关注云+社区

领取腾讯云代金券