
处理以下文件内容,取出域名,并根据域名进行计数和排序: (百度和搜狐面试题)
请参考答案的详细说明:
文件内容:
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-F“ / +”'{酒店[$ 2] ++} END {用于(polinhotel)printpolawk数组下标,酒店[pol]}'url.txt | sort-rnk2
让我们看看这个问题.

首先明确我们的目标,我们想要什么结果?
在这里,我们简化了问题,简化了对www.mp3.post进行计数并重复多次的目标,读者可以自行进行调整,并对mp3.etiantian.org,post.etiantian.org域名进行计数
如果出现www,则使用a记录www的重复次数awk数组下标,如果出现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,所以在一般的工作中会有很多域名,您会发疯的.
所以我们需要一种方法(一个名称)可以容纳这三种情况而不会互相影响.

这就是我们正在讨论的数组(酒店),这三种情况是我们正在讨论的数组(酒店房间)中的元素.
这与以前的想法相同,分为三种情况,这次将不同的情况放入了酒店的三个房间.
[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房间
如果遇到帖子,您将自动进入帖子室
是的,想想我们如何获取www或mp3或通过awk发布信息?
它们都是第二栏! 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
他可以执行更复杂的计算,当然,他可以完成我们最常用的统计信息(重复数据删除).
如果您不使用2美元作为房号,我们需要手动指定房间,这将是一场噩梦.
$ 2只能代表www,mp3,post. 当然,它也涉及到先前的知识,选择合适的刀,然后剪出想要的东西.

用于统计计数(重复数据删除)的awk数组
用于累积(计算总和)的awk数组
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-171844-1.html
有利益就有冲突