给你一个G的ip列,用shell求出top10

从需求开始:

给你一个G的ip列??用shell求出top10

从需求描述分析得出

1个G文件;

shell来操作;

top10

 

先看一个小案例

对下面的文本进行统计,top 5。

文件内容为:

www.baidu.com
www.hah.com
www.sina.com
www.haha.com
www.weixuehao.com
www.weixuehao.com
www.yahoo.com
www.hah.com
www.hah.com
www.weixuehao.com
www.sina.com
www.sohu.com
www.123.com
www.weixuehao.com

效果:

QQ截图20150319103313

命令:

more mytop | sort | uniq -c | sort -nr | head -5

知识点解析:

shell中管道:

shell用 | 竖线分隔,将前面的标准输出,作为后面命令的标准输入

shell中sort的使用:

sort是排序的意思,默认按ASCII码进行升序排序。

参数 -n,是以数字形式排序

参数 -r,降序排序

shell中uniq的使用

对文本进行去重。小例子:

假如:有一个文件myuniq,内容为

aaa
aaa
bbb
ccc
aaa

使用 uniq myuniq后,输出结果为:

aaa
bbb
ccc
aaa

shell中head的使用。

head -5输出前5行,也可以写成 head -n 5

tail -5 输出后5行,也可以写成 tail -n 5

 

需求加深点

分析下面的文本,对第一列ip求top 10 操作

QQ截图20150319104727

一共5个文本文件,请到百度网盘,自己下载? 链接: http://pan.baidu.com/s/1jGf4LDW 密码: q8mw

效果:

QQ截图20150319105740

命令:

more *.* | awk -F ‘ ‘ ‘{print $(1)}’ | sort | uniq -c | sort -nr | head -10

这里的命令,要注意空格。比如: -F 后面的单引号里,是有空格的。

知识点解析:

sort,uniq,head和shell管道都说过了。主要说一下awk命令

awk,很好的一个命令,使用频率较高。主要是用在对文本文件,进行解析。这里awk主要是将文本,每一行,用空格分隔开,然后打印输出第一个位置的内容。-F 指定分隔符是什么,我们这里用的空格。 print 这个类似于C语言的语法。

 

加深难度,对1个G的文件进行解析

文件使用的上面的文件,格式一模一样。(其实我就是把上面的几个文件,复制了很多份,变成了1个G)。1个G难道和小文件,有区别?

文件可以去百度网盘下载,也可以自己复制几份,凑成1个G。下载地址: 链接: http://pan.baidu.com/s/1kTh4ACR 密码: z4jw

下面都是针对于我百度网盘里文件,来做的。

看一下文件,一共有多少条记录

wc-l *.*

一共有3217051条记录。

效果:

QQ截图20150319111026

命令:

?more *.* | awk -F ‘ ‘ ‘{print $(1)}’ | sort | uniq -c | sort -nr | head -10

解析:

程序运行了 55秒,数据大了,运行时间就长了。目前看来,只和运行时间有关系。

 

备注:

 

 

 

 

 

 

One comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注