`
james_lover
  • 浏览: 44269 次
社区版块
存档分类
最新评论

去哪网的一个面试题:shell统计日志中各IP 出现的次数

阅读更多

       去哪网的面试:数据量不大的话用awk最方便,但长时间没有用过了,忘记了awk数组的用法。

在这里复习一下。

假设数据格式为:

178.60.128.31 www.google.com.hk
193.192.250.158 www.google.com
210.242.125.35 adwords.google.com
210.242.125.35 accounts.google.com.hk
210.242.125.35 accounts.google.com
210.242.125.35 accounts.l.google.com
64.233.181.49 www.google.com
212.188.10.167 www.google.com
23.239.5.106 www.google.com
64.233.168.41 www.google.com
62.1.38.89 www.google.com
62.1.38.89 chrome.google.com
193.192.250.172 www.google.com
212.188.10.241 www.google.com
37.228.69.57 www.google.com
222.255.120.42 www.google.com
222.255.120.42 www.gstatic.com
212.188.10.167 www.googleapis.com
64.233.181.49 www.googleapis.com
64.233.181.49 fonts.googleapis.com
193.192.250.158 plus.google.com
193.192.250.158 talkgadget.google.com 
193.192.250.158 ssl.gstatic.com
193.192.250.158 images-pos-opensocial.googleusercontent.com
193.192.250.158 images1-focus-opensocial.googleusercontent.com
193.192.250.158 images2-focus-opensocial.googleusercontent.com
193.192.250.158 images3-focus-opensocial.googleusercontent.com
193.192.250.158 images4-focus-opensocial.googleusercontent.com
193.192.250.158 images5-focus-opensocial.googleusercontent.com
193.192.250.158 images6-focus-opensocial.googleusercontent.com
193.192.250.158 clients4.google.com
222.255.120.42 google.com
222.255.120.42 apis.google.com
222.255.120.42 clients1.google.com
193.192.250.158 clients2.google.com
193.192.250.158 clients3.google.com
193.192.250.158 clients5.google.com
64.233.181.49 maps.google.com
64.233.181.49 mts0.google.com
64.233.181.49 maps.gstatic.com

 

awk的统计代码:

 awk '{arr[$1]++;}END{for(i in arr){print i , arr[i] }}' test.txt

 

输出:

[blog@AY1310301904525972ddZ ~]$ awk '{arr[$1]++;}END{for(i in arr){print i , arr[i] }}' test.txt
212.188.10.241 1
64.233.168.41 1
23.239.5.106 1
193.192.250.158 15
178.60.128.31 1
37.228.69.57 1
212.188.10.167 2
193.192.250.172 1
62.1.38.89 2
64.233.181.49 6
210.242.125.35 4
222.255.120.42 5

 

增加排序:

[blog@AY1310301904525972ddZ ~]$ awk '{arr[$1]++;}END{for(i in arr){print i , arr[i] }}' test.txt | sort -n -k 2
178.60.128.31 1
193.192.250.172 1
212.188.10.241 1
23.239.5.106 1
37.228.69.57 1
64.233.168.41 1
212.188.10.167 2
62.1.38.89 2
210.242.125.35 4
222.255.120.42 5
64.233.181.49 6
193.192.250.158 15

 

 =============对网友:【hattah】 回答的补充===============

测试了两种方法的效率:

理论上sort排序数据量越大,速度越慢。

实测结果:

[blog@AY1310301904525972ddZ ~]$ time awk '{print $1}' test.txt |sort|uniq -c
   1380 178.60.128.31
  17312 193.192.250.158
   1160 193.192.250.172
   4640 210.242.125.35
   2320 212.188.10.167
   1160 212.188.10.241
   5734 222.255.120.42
   1160 23.239.5.106
   1160 37.228.69.57
   2320 62.1.38.89
   1160 64.233.168.41
   6894 64.233.181.49

real    0m0.236s
user    0m0.228s
sys     0m0.004s

 

[blog@AY1310301904525972ddZ ~]$  time  awk '{arr[$1]++;}END{for(i in arr){print i , arr[i] }}' test.txt | sort -n -k 2  
193.192.250.172 1160
212.188.10.241 1160
23.239.5.106 1160
37.228.69.57 1160
64.233.168.41 1160
178.60.128.31 1380
212.188.10.167 2320
62.1.38.89 2320
210.242.125.35 4640
222.255.120.42 5734
64.233.181.49 6894
193.192.250.158 17312

real    0m0.025s
user    0m0.022s
sys     0m0.001s

 

2
0
分享到:
评论
8 楼 anlystar 2014-08-21  
hattah 写道
cat test.txt|awk '{print $1}'|sort|uniq -c

正解,我当时面试这么答,面试官好像很满意
7 楼 paladin1988 2014-08-20  
当初面试这个题目的时候我直接放弃了,因为没用LINUX好久了,呵呵。。那是去年的这个时候。。
6 楼 小橙子 2014-08-20  
1楼正解。估计面试官想考你的就是shell的组合使用。
5 楼 xppzhou 2014-08-19  
这些数据都是存在数据库的吗?
分组查询最简单
select count(ip),ip
from 表
group by ip
4 楼 lvwenwen 2014-08-19  
考你hadoop的MapReduce吧
3 楼 james_lover 2014-08-19  
hattah 写道
cat test.txt|awk '{print $1}'|sort|uniq -c

这个更好用啊。
2 楼 bewithme 2014-08-19  
我想他是在考你hadoop的MapReduce吧
1 楼 hattah 2014-08-19  
cat test.txt|awk '{print $1}'|sort|uniq -c

相关推荐

    一个shell面试题

    `cut`用于从日志文件中提取IP地址,`sort`和`uniq`用于统计每个IP的出现频率,而`awk`则构建了一个关联数组来追踪每个IP的访问次数。最终通过`sort`按访问次数降序排列,输出最常访问的IP列表。 ### 知识点五:亚瑟...

    shell编程面试题.doc

    4. **统计Nginx日志中每个IP的访问量**: `awk`命令用于提取日志中的IP地址(`$1`),`sort -u`进行排序和去重,`uniq -c`统计每个唯一IP的数量。 5. **计算所有进程占用内存的总和**: `ps aux`列出所有进程的...

    IDC运维工程师面试题及其答案 .docx

    - NAT(网络地址转换)解决了公网IP地址不足的问题,将多个私有IP映射到一个或几个公网IP。 - ARP(地址解析协议)用于根据IP地址查找对应的MAC地址。 13. **DNS**: - DNS(域名系统)的作用是将域名解析成IP...

    面试题.md

    - 使用`cat`、`awk`、`uniq`、`sort`和`head`命令组合,可以统计Nginx访问日志中每个IP地址的访问次数,并列出前10名。 - `awk`用于提取日志中的IP地址并计数。 - `uniq`与`sort`结合使用来排序计数结果。 8. **...

    校园招聘历年经典面试题汇总:运维研发岗1

    16. **日志分析**:例如统计Nginx日志中IP出现次数,可以使用awk、grep、sort等命令进行处理。 17. **排序算法**:如二分查找、快速排序是基础算法,面试中可能要求现场编写实现。 18. **Linux系统启动流程**:...

    Linux面试题与答案

    ### Linux面试题与答案知识点详解 #### 1. Linux系统中的文件类型与设备 - **普通文件**:最常见的文件类型,包含数据。 - **目录文件**:存储其他文件或目录的容器。 - **链接文件**:指向另一个文件的指针。 - **...

    linux面试题 企业面试题

    ### Linux面试题解析 #### 一、Linux基本概念与文件系统 **1. 在Linux系统中,以文件方式访问设备。** - **知识点解析:**Linux操作系统中的一个重要特性就是几乎所有的设备都被视为文件来处理。这包括硬件设备如...

    hadoop大数据就业面试题

    在这篇文章中,我们将总结 Hadoop 大数据就业面试题中的知识点,涵盖 Hadoop 的安装、配置、进程、调度器、MapReduce 编程语言等方面。 一、Hadoop 的安装和配置 在安装 Hadoop 之前,需要 root 账户登录,然后...

    NSD_面试题_第二阶段.pdf

    3. **使用awk统计httpd访问日志中IP出现次数**:利用`awk`的数组功能,数组`ip`的键是日志中的客户端IP,值是出现次数。通过`++`操作符对IP进行计数,最后通过`END`块遍历数组输出结果。 4. **标准输出和错误输出的...

    免费的Linux运维中级面试题.rar )

    Linux运维是IT领域中的一个重要分支,它涉及到系统管理、网络配置、服务器优化、故障排查等多个方面。本资源“免费的Linux运维中级面试题.rar”包含了知名公司对中级Linux运维工程师的面试题,可以帮助求职者更好地...

    linux面试题_比较全

    通过脚本处理文本文件中的域名,并统计出现次数,是Linux系统中常见的文本处理任务之一。 **详细说明:** 给出的示例使用了`sed`、`awk`和`sort`等工具来完成任务: 1. **使用`sed`去除URL中的"http://"以及路径...

    互联网大公司面试笔试题运维面试题.docx

    【互联网大公司面试笔试题运维面试题】 在互联网行业中,运维工程师是至关重要的角色,他们负责维护公司的IT基础设施,确保系统的稳定性和安全性。面试中,Linux运维工程师常常会被问及一系列技术问题,以下是对...

    嵌入式常见面试题.

    该命令读取日志文件,并使用`awk`提取IP地址,接着统计每个IP出现的次数,并输出前5名。 #### 8. 如何查看二进制文件的内容 对于二进制文件,通常无法直接阅读其内容,但可以使用`hexdump`命令以十六进制形式显示...

    linux面试题

    ### Linux面试题详解 #### 一、Linux基础知识 1. **Linux系统的发展历史与特点** - Linux是一种自由和开放源代码的操作系统,由Linus Torvalds在1991年首次发布。 - 特点包括稳定性强、安全性高、支持多种硬件...

    linux面试题(收集2)

    本文将围绕“Linux面试题(收集2)”这一主题,深入探讨和解析一系列常见的Linux面试问题,旨在帮助求职者或在职人员巩固和提升Linux知识。 【描述】:虽然描述为空,但根据标题我们可以推测这是一份集锦,包含了一...

Global site tag (gtag.js) - Google Analytics