做者:川山甲
來源: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
看爽了是否是?
若有錯誤或其它問題,歡迎小夥伴留言評論、指正。若有幫助,歡迎點贊+轉發分享。
歡迎你們關注民工哥的公衆號:民工哥技術之路