数据结构论坛

注册

 

发新话题 回复该主题

awk一个linux系统的中的好教官 [复制链接]

1#
北京哪里是治疗白癜风最好的 http://baidianfeng.39.net/

awk是一个文本处理程序,但是我更喜欢叫它教官,因为这样更形象。

我喜欢把各种文本的内容称为士兵,而教官负责管理培训它们。

日志统计

开发web的人员知道,我们经常需要查看nginx的服务器来统计来访者的记录。而awk教官可以很方便帮我们处理好存放在日志中的士兵,可以帮助我们选出最高的士兵,可以帮助我们选出经常出操的士兵,可以帮我们选出哪些士兵经常在一起。

看下面的一个需求:我们需要看看经常访问网站的有哪些ip,并且把它们的访问次数统计出来。初看这个问题似乎很复杂,不过不要担心,有问题,找教官,我们只要把我们的要求告诉教官,它就会告诉我们把结果,这很像sql语句,我们只要写出要获取的数据就行,至于怎么获取,全部交给数据库自己处理。

我们的awk语句如下:

awk{sum[$1]++}END{for(ipinsum)printip,sum[ip]}access.log

sort-rn-k2

head

结果如下

66.98...34......83...................89.

我们简单分析下我们写的语句

awk这个不用说,就是我们向教官打招呼{sum[$1]++}END{for(ipinsum)printip,sum[ip]}这个单引号包含的就是我们向教官询问的问题,其中第一个{}表示我们要循环每一行,然后把ip保存到sum数组中,第二个{}表示我们要把相同的ip求和统计出来,其中的END表示最后执行,当然在第一个{}之前我们也可以有一个BEGIN。access.log是我们要统计的文件,就是告诉教官要统计那个营的士兵sort是linux的排序命令,就是将士兵排序,其中-rn表示按照身高,降序排列,因为排序还可能按照体重等排序。k表示我们需要对那列进行排序,因为前面统计的是ip,count,而我们需要按照count进行排序,所以这里写2head是linux的头部预览命令,一个营有很多士兵,我们直需要选出前面的几个士兵就可以了,默认它是选出前是个士兵,当然我们也可以使用head-n5选择前5个士兵。工作流程

awkBEGIN{

分享 转发
TOP
发新话题 回复该主题