前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >awk数组统计

awk数组统计

作者头像
全栈程序员站长
发布2022-09-09 10:31:58
7830
发布2022-09-09 10:31:58
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题)

代码语言:javascript
复制
1 http://www.etiantian.org/index.html
2 http://www.etiantian.org/1.html
3 http://post.etiantian.org/index.html
4 http://mp3.etiantian.org/index.html
5 http://www.etiantian.org/3.html
6 http://post.etiantian.org/2.html

要求结果:

代码语言:javascript
复制
mp3.etiantian.org 1
post.etiantian.org 2
www.etiantian.org 3

思路:

  1. 取出域名
    1. 以斜线为菜刀取出第二列(域名)
  2. 进行加工
    1. 创建一个数组
    2. 把第二列(域名)作为数组的下标
    3. 通过类似于i++的形式进行计算数量
  3. 统计后把结果输出

1、查看需要处理的文件

代码语言:javascript
复制
1 [root@martin ~]# cat test.txt 
2 http://www.etiantian.org/index.html
3 http://www.etiantian.org/1.html
4 http://post.etiantian.org/index.html
5 http://mp3.etiantian.org/index.html
6 http://www.etiantian.org/3.html
7 http://post.etiantian.org/2.html

2、以斜线为分割符,取出第二列,+表示连续的。

代码语言:javascript
复制
1 [root@martin ~]# awk -F "/+" '{print $2}' test.txt 
2 www.etiantian.org
3 www.etiantian.org
4 post.etiantian.org
5 mp3.etiantian.org
6 www.etiantian.org
7 post.etiantian.org

3、创建数组和进行统计

代码语言:javascript
复制
1 [root@martin ~]# awk -F "/+" '{hotel[$2]}' test.txt             #创建数组
2 [root@martin ~]# awk -F "/+" '{hotel[$2];print $2}' test.txt    #创建数组,并通过print 输出元素名字
3 www.etiantian.org
4 www.etiantian.org
5 post.etiantian.org
6 mp3.etiantian.org
7 www.etiantian.org
8 post.etiantian.org
代码语言:javascript
复制
1 [root@martin ~]# awk -F "/+" '{hotel[$2]++}' test.txt                    #对数组相同下标的数组进行计数统计
2 [root@martin ~]# awk -F "/+" '{hotel[$2]++;print $2,hotel[$2]}' test.txt #通过print输出元素名字和统计数
3 www.etiantian.org 1
4 www.etiantian.org 2
5 post.etiantian.org 1
6 mp3.etiantian.org 1
7 www.etiantian.org 3
8 post.etiantian.org 2

2表示的是每一行的第二列,是一个变量;hotel[2]++这种形式类似于i++,只不过把变量i换成了数组hotel[

4、统计完毕后再用for循环打印输出数组不同下表和对应统计数

代码语言:javascript
复制
1 [root@martin ~]# awk -F "/+" '{hotel[$2]++}END{for(pole in hotel) print pole,hotel[pole]}' test.txt
2 mp3.etiantian.org 1
3 post.etiantian.org 2
4 www.etiantian.org 3
代码语言:javascript
复制
1 优化显示,格式化输出
2 [root@martin ~]# awk -F "/+" '{hotel[$2]++}END{for(pole in hotel) print pole,hotel[pole]}' test.txt|sort -k2|column -t
3 mp3.etiantian.org   1
4 post.etiantian.org  2
5 www.etiantian.org   3

5、统计linux系统的history历史记录使用前10的命令

代码语言:javascript
复制
 1 [root@martin ~]# history|awk '{order[$2]++}END{for(n in order) print n,order[n]}'|sort -rnk2|head|column -t
 2 awk                          54
 3 history|awk                  44
 4 [                            22
 5 ll                           19
 6 rpm                          12
 7 yum                          8
 8 w                            6
 9 uname                        6
10 history                      6
11 /etc/rc.d/init.d/keepalived  5

本文参考自 “李导的博客” 博客,原地址http://lidao.blog.51cto.com/3388056/1912219

转载于:https://www.cnblogs.com/jmaly/p/6689310.html

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161670.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档