做者:川山甲
来源:https://www.cnblogs.com/baoch...php
# 序 html
产品经理(PM)过来找你要最近某某的数据,而你知道这些数据目前只能经过日志文件去分析,由于咱们知道,咱们不可能把全部数据都放入db中(这不科学啊!)。每当有这样任务的时候,你就用php或java(又或c)写一个特殊任务的程序,这真是一件使人头痛的事情。java
# 放入db???sql
为何我不建议把数据放入db中呢?优势不言自明,咱们能够经过sql语句很容易把数据拿出来。segmentfault
缺点呢?首先就是咱们不能把什么东西都往db里放?网络
缘由,我概括了如下几点:tcp
一、数据的抽风型:spa
通常都是某某(不敢指明点姓,怕打击报复)脑门子一拍,忽然想要某些数据,这就会来找你要。等这股抽风劲一过,很长时间没人再找你要数据了。日志
二、数据的臃肿型:code
与其说是臃肿还不如说是乱七八糟。你不能把那一坨一坨的杂七杂八的数据,一股脑放入db中吧?那你的后台db成什么样子了?因此咱们要管好咱们的后院,不能什么东西都放到家里面。
三、成本:
干什么事情,咱们不能作赔本的买卖。像这种一次性的买卖,咱们就要下降成本去作。
为了解决以上问题,咱们请出awk神器吧?一种“短小精悍”的神器,经常用一两行代码就能搞定一些复杂的任务。
# 本文宗旨
awk不难,关键是看咱们怎么思考?个人思考方式是:在这么多数据行中,我要找什么(行位置)?找到以后,咱们要干什么(如{})?
故个人主题就出来了:找什么和干什么。我不想讲什么语法之类的东西(不要在乎这些细节)。
# 找什么?
这个世界最难的不是作什么,而是找什么?李清照的“寻寻觅觅”,最后把本身寻觅没了。仿古人,俺也寻寻觅觅了一阵子,结果跟清照大姐同样,迷失在寻寻觅觅中,到如今都不知道我在寻觅什么?——我的认为找什么不是体力活,而是技术活。awk吸引个人,也就是它教会了我怎么找我想要的东西?
准备干粮
cat netstat.txt Proto Recv-Q Send-Q Local-Address Foreign-Address State tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN tcp 1 1 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN tcp 0 0 yuedu.com:80 124.205.5.146:18245 TIME_WAIT tcp 0 0 yuedu.com:80 61.140.101.185:37538 FIN_WAIT2 tcp 0 0 yuedu.com:80 110.194.134.189:1032 ESTABLISHED tcp 0 0 yuedu.com:80 123.169.124.111:49809 ESTABLISHED tcp 0 0 yuedu.com:80 116.234.127.77:11502 FIN_WAIT2 tcp 0 0 yuedu.com:80 123.169.124.111:49829 ESTABLISHED tcp 0 0 yuedu.com:80 183.60.215.36:36970 TIME_WAIT tcp 0 4166 yuedu.com:80 61.148.242.38:30901 ESTABLISHED tcp 0 1 yuedu.com:80 124.152.181.209:26825 FIN_WAIT1 tcp 0 0 yuedu.com:80 110.194.134.189:4796 ESTABLISHED tcp 0 0 yuedu.com:80 183.60.212.163:51082 TIME_WAIT tcp 0 1 yuedu.com:80 208.115.113.92:50601 LAST_ACK tcp 0 0 yuedu.com:80 123.169.124.111:49840 ESTABLISHED tcp 0 0 yuedu.com:80 117.136.20.85:50025 FIN_WAIT2 tcp 0 0 :::22 :::* LISTEN
上小菜(基础条件匹配):
查询全部tcp中,接受队列非0的网络包。
localhost:zhoubc Guest$ awk '$1 =="tcp" && $2 > 0' netstat.txt tcp 1 1 0.0.0.0:80 0.0.0.0:* LISTEN
打印出来的内容,咱们不知所云。若是把第一行打出来,就一目了然了。这时候咱们要用到awk的全局常量(若是想知道AWK的全局常量,咱们能够往下看,附录,我把经常使用的罗列出来了)NR。
localhost:zhoubc Guest$ awk 'NR==1 || $1 =="tcp" && $2 > 0' netstat.txt Proto Recv-Q Send-Q Local-Address Foreign-Address State tcp 1 1 0.0.0.0:80 0.0.0.0:* LISTEN
看爽了是否是?
若有错误或其它问题,欢迎小伙伴留言评论、指正。若有帮助,欢迎点赞+转发分享。
欢迎你们关注民工哥的公众号:民工哥技术之路