初学awk数组会遇到的几个常见问题
2017-04-24 15:21
309 查看
原题目:
处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题)答案的详细讲解请参考:http://lidao.blog.51cto.com/3388056/1912219
文件内容:
有的小伙伴初学awk数组会有下面几个疑问。
为何要使用awk数组。
为何要使用$2作为房间号码。
我们结合这道题来看一下。
首先明确我们的目标,我们要什么结果?这里我们简化问题,把目标简化为统计www,mp3.post重复了几次,读者可以自行调整,并统计www.etiantian.org,mp3.etiantian.org, post.etiantian.org这几个域名。www 出现了几次
mp3 出现了几次
post 出现了几次
第一个里程碑-简单容易理解的方法:
如果出现www则用a记录下www的重复数量,如果mp3出现则用b记录下mp3的重复数量,如果出现post则通过c记录下post的重复数量。答案如下:
还是刚才的思路,分三种情况,把不同的情况,这次是放入酒店的三个房间中。
还是很麻烦怎么解决呢?有什么方法让遇到相同的内容就进入相同的房间吗?如果遇到www自动进入www房间如果遇到MP3自动进入MP3房间如果遇到post自动进入post房间可以的,思考一下我们如何通过awk得到www或mp3或post的呢?他们都是第二列!awk中可以用$2表示。 所以,这个数组就可以写为。h[$2]++即可,自动对号入座,对号入座后进行自加的操作(自动加1)。
只要最后的结果可以通过END模式来解决。
为何要使用awk数组。
他可以进行比较复杂的计算,当然也可以完成我们最常用的统计(去重)。
为何要使用$2作为房间号码。
如果不用$2,作为房间号码,我们就需要手动来指定房间,这将是个噩梦。$2正好可以表示www,mp3,post这几个内容。当然也涉及到了之前的知识,选择合适的刀,切出你想要的东西。
重新看下,hotel[$2]++是如何执行的,请看下图。
相关博客内容:
awk数组进行统计计数(去重)
http://lidao.blog.51cto.com/3388056/1912219
awk数组进行累加(计算总和)
http://lidao.blog.51cto.com/3388056/1914563
处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题)答案的详细讲解请参考:http://lidao.blog.51cto.com/3388056/1912219
文件内容:
http://www.etiantian.org/index.html http://www.etiantian.org/1.html http://post.etiantian.org/index.html http://mp3.etiantian.org/index.html http://www.etiantian.org/3.html要求结果:
mp3.etiantian.org 1 post.etiantian.org 2 www.etiantian.org 3答案:
为何要使用awk数组。
为何要使用$2作为房间号码。
我们结合这道题来看一下。
首先明确我们的目标,我们要什么结果?这里我们简化问题,把目标简化为统计www,mp3.post重复了几次,读者可以自行调整,并统计www.etiantian.org,mp3.etiantian.org, post.etiantian.org这几个域名。www 出现了几次
mp3 出现了几次
post 出现了几次
第一个里程碑-简单容易理解的方法:
如果出现www则用a记录下www的重复数量,如果mp3出现则用b记录下mp3的重复数量,如果出现post则通过c记录下post的重复数量。答案如下:
[root@oldboy32-vm1files]#awk -F "[/]+"'$2~/www/{a++}$2~/mp3/{b++}$2~/post/{c++}END{print"www:"a,"mp3:"b,"post:"c}' url.txt演示过程:
[root@showawkfile]# awk -F "[/]+"'$2~/www/{a++}$2~/mp3/{b++}$2~/post/{c++}END{print"www:"a,"mp3:"b,"post:"c}' url.txt www:3 mp3:1 post:2虽然这样很容易理解,因为这里只有三种域名www,post,mp3的,一般工作上会有很多个域名,你就会疯了。所以我们想要一个方法,一个东西(一个名字)可以装下这三种情况,并且互相不影响。这个东西就是我们说的数组(酒店),这三个情况就是我们说的数组里面的元素(酒店房间)。 第二个里程碑-简单实用awk数组
还是刚才的思路,分三种情况,把不同的情况,这次是放入酒店的三个房间中。
[root@show awkfile]#awk -F "[/]+" '$2~/www/{h["www"]++}$2~/mp3/{h["mp3"]++}$2~/post/{h["post"]++}END{printh["www"],h["mp3"],h["post"]}' url.txt 3 1 2提示:awk数组如果自己指定房间名字(数组元素名字),切记一定要加上双引号。否则awk会认为这是一个变量。
[root@show awkfile]#awk 'BEGIN{h[www]=1;h[bbs]=2;print h[www],h[bbs]}' 2 2 [root@show awkfile]#awk 'BEGIN{h["www"]=1;h["bbs"]=2;printh["www"],h["bbs"]}' 1 2上面的例子就是如果不加上双引号,awk会认为是变量。第三个里程碑-对号入座
还是很麻烦怎么解决呢?有什么方法让遇到相同的内容就进入相同的房间吗?如果遇到www自动进入www房间如果遇到MP3自动进入MP3房间如果遇到post自动进入post房间可以的,思考一下我们如何通过awk得到www或mp3或post的呢?他们都是第二列!awk中可以用$2表示。 所以,这个数组就可以写为。h[$2]++即可,自动对号入座,对号入座后进行自加的操作(自动加1)。
[root@show awkfile]#awk -F "[/.]+" '{h[$2]++;print h["www"]}' url.txt 1 2 2 2 3 3 [root@show awkfile]#awk -F "[/.]+" '{h[$2]++;print"www:"h["www"],"mp3:"h["mp3"],"post:"h["post"]}'url.txt www:1 mp3: post: www:2 mp3: post: www:2 mp3: post:1 www:2 mp3:1 post:1 www:3 mp3:1 post:1 www:3 mp3:1 post:2 这样虽然可以看到我们想要的结果,但是也显示出了执行过程,我们只想要结果呀!第四个里程碑-输出结果
只要最后的结果可以通过END模式来解决。
[root@show awkfile]#awk -F "[/.]+" '{h[$2]++}END{print"www:"h["www"],"mp3:"h["mp3"],"post:"h["post"]}'url.txt www:3 mp3:1 post:2这是一个房间一个房间的把内容显示出来,还是那句话当房间很多很多的时候,你又疯了。awk自然有解决这个问题的方法,专用的循环。
[root@show awkfile]#awk -F "[/.]+" '{h[$2]++}END{for(pol in h)print pol,h[pol]}' url.txt www 3 mp3 1 post 2到此我们又重新理解了一次awk数组。回顾下开始我们的问题。
为何要使用awk数组。
他可以进行比较复杂的计算,当然也可以完成我们最常用的统计(去重)。
为何要使用$2作为房间号码。
如果不用$2,作为房间号码,我们就需要手动来指定房间,这将是个噩梦。$2正好可以表示www,mp3,post这几个内容。当然也涉及到了之前的知识,选择合适的刀,切出你想要的东西。
重新看下,hotel[$2]++是如何执行的,请看下图。
相关博客内容:
awk数组进行统计计数(去重)
http://lidao.blog.51cto.com/3388056/1912219
awk数组进行累加(计算总和)
http://lidao.blog.51cto.com/3388056/1914563
相关文章推荐
- 关于面试常见的一个数组中找出出现一次的几个数字的问题
- 初学嵌入式遇到的几个问题
- 初学WCF,今天调试WCF遇到的几个问题记录下
- 初学hibernate遇到的几个问题的解决
- 初学Java遇到的一个数组小问题
- 初学.Net mvc遇到的几个问题
- 2014年3月29日 遇到的关于opencv将图像转换为数组的几个问题 包含cvmat 到mat转换
- asp中遇到的几个问题——数据库连接,几个常见控件的使用问题及其解决
- 嵌入式面试时遇到的几个常见问题
- 初学python遇到的几个问题
- 初学Android的几个常见问题
- 初学visual studio 2013 遇到的几个问题
- awk数组常见问题
- 初学Opencv时候遇到的几个编译器报错问题
- JSP中遇到的几个常见问题
- 【android】adb连接几个常见问题(遇到再新增)
- Java初学中遇到的几个问题
- 初学编程的人一般会遇到的几个问题
- PotPlayer播放器在双屏扩展模式下,视频播放时所遇到的几个常见问题的专业解答
- 框架使用过程中遇到的几个问题