linux下文本分析的神器—awk命令

awk命令简介:

awk 是一个很强大的文本分析命令。awk的功能,简单来说就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。

小结了关于awk命令最常用的几种方式,写了3个demo

使用的方式:

#xxxx  表示的是awk命令参数的具体的格式
awk  xxxxx     文件路径
cat  文件路径   | awk  xxxxx

awk编程:

awk ' {print $1}'    /home/filename.txt  #输出文件的第一列

#这里创建了自定义的变量 count,注意 创建只定义的变量是不需要加$符号的,print的时候也不需要加
awk ' BEGIN {count=0}  {count++ ; print count $1}'   /home/filename.txt  
# 语法格式
awk ' BEGIN {XXXX}  {XXXX}  END{XXXX} '
awk 'BEGIN {count=0;sum=0}   xxxxx '                              #语句之间 + 分号
awk 'BEGIN {res[$1]++}  END{for (r in res) print r"  "res[r]} '   # for 要写成 for (r in res)      

Demo 1:

#该命令用来列出目前与过去登录系统的用户相关信息
zhaozheng@myubuntu:~$ last -n 5
2017-03-22 19-46-36屏幕截图.png
zhaozheng@myubuntu:~$ last -n 5 | awk '{print $1}'
2017-03-22 19-50-02屏幕截图.png
2017-03-22 19-51-15屏幕截图.png
2017-03-22 19-51-05屏幕截图.png

awk命令默认的格式是“空格”作为$的分隔符。但是也可以通过 -F 参数指定。比如 下面这样,将空格作为分隔符,更改为: 符号。

-F  ' : '
2017-03-22 20-21-03屏幕截图.png

注意 : BEGIN 是区分大小写的!!!!

Demo 2:
使用awk 来统计单词的个数

 awk '{count++;print $0;} END{print "user count is ", count}' /etc/passwd
2017-03-22 20-42-25屏幕截图.png

DEMO 3:
写一个好玩的,使用awk分析一个网站的pv。从
网站服务器被访问的ip里面,找出top10。

这是网站的log日志。


2017-03-22 21-06-18屏幕截图.png

使用awk命令查看日志的条数,总共有14620条。(count从0开始的)

awk 'BEGIN {count=0;} {name[count]=$1 count++} END {print count} ' ./access.log.10 
14619

下一步使用awk命令,统计在1万4千条访问服务器的ip里面统计top10。

cat access.log.10 | awk ' {res[$1]++} END {for(r in res) print r"\t"res[r] } ' | sort -k2 -r | head -n 10
163.177.71.12   972
101.226.68.137  972
183.195.232.138 971
50.116.27.194   97
14.17.29.86 96
61.135.216.104  94
61.135.216.105  91
61.186.190.41   9
59.39.192.108   9
220.181.51.212  9

awk 相当于创建了一个map,key是ip,value是对应的次数。然后一行一行的读入。在使用sort命令排序,使用head 显示前10个。

2017-03-22 21-15-46屏幕截图.png

网站log日志下载连接:
https://github.com/zhaozhengcoder/hadoop/tree/master/awk/logfile

当然,也可以使用hadoop的mapreduce框架来分析一波。


练习

grade.txt 文件

zhao 90
qian 80
cun 70
li 60
zhou 50
wu 40
en 30
wang 20
  1. 统计行数
awk 'BEGIN {count=0} {count+=1} END{print count}' grade.txt 
  1. 统计平均成绩
awk 'BEGIN {sum=0;count=0} {sum+=$2;count+=1} END{print sum/count}' grade.txt 
  1. 统计前三名
zz@ubuntu:~/code$ cat grade.txt | sort -k2 |tail -n 3
cun 70
qian 80
zhao 90

# sort -k2   ##表示的是按照第二类的大小,从小到大排序
# tail -n 3  ##显示最后的三行

对于一个新的grade.txt 文件,统计每个名字出现的次数

zhao 90
qian 80
sun 70
zhao 90
zhao 90
zhao 90
zhao 90
qian 80
sun 70
awk '{res[$1]++} END{for (r in res) print r" "res[r]}' grade.txt 

qian 2
zhao 5
sun 2

要注意的语法:

  1. 分号表示换行 ;
  2. for 的写法 for (r in res) print r" "res[r]

PS :

如果不用awk,用python就有点小复杂(起码代码量会多一点)
对于grade.txt文件

zhao 90
qian 80
sun 70
zhao 90
zhao 90
zhao 90
zhao 90
qian 80
sun 70
f= open('grade.txt','r')
count={}
for line in f.readlines():
    key = line.strip().split(' ')[0]
    if key not in count:
        count[key]=1
    else:
        count[key]+=1

for key in count:
    print (key," ",count[key])
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,131评论 2 34
  • awk介绍awk变量printf命令:实现格式化输出操作符awk patternawk actionawk数组aw...
    哈喽别样阅读 1,549评论 0 4
  • 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤...
    花丶小伟阅读 503评论 0 0
  • linux awk命令详解 来源:ggjucheng 链接:http://www.cnblogs.com/ggju...
    meng_philip123阅读 853评论 0 1
  • 三年发布6款手机 专注才能极致 大家好。 非常高兴有机会来这里和大家一起分享我们小米的创业故事。四年半前,小米在中...
    职场起跑线阅读 265评论 0 2