去哪网的一个面试题: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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值