awk,真的是一款牛逼的神器!
awk,真的是一款牛逼的神器!
由久未見提交於2020-11-27 12:38:57作者:川山甲
來源:https://urlify.cn/7JjQVj
# 序
產品經理(PM)過來找你要最近某某的資料,而你知道這些資料目前只能通過日誌檔案去分析,因為我們知道,我們不可能把所有資料都放入db中(這不科學啊!)。每當有這樣任務的時候,你就用php或java(又或c)寫一個特殊任務的程式,這真是一件令人頭痛的事情。
# 放入db???
為什麼我不建議把資料放入db中呢?優點不言自明,我們可以通過sql語句很容易把資料拿出來。
缺點呢?首先就是我們不能把什麼東西都往db裡放?
原因,我歸納了以下幾點:
1、資料的抽風型:
一般都是某某(不敢指明點姓,怕打擊報復)腦門子一拍,突然想要某些資料,這就會來找你要。等這股抽風勁一過,很長時間沒人再找你要資料了。
2、資料的臃腫型:
與其說是臃腫還不如說是亂七八糟。你不能把那一坨一坨的雜七雜八的資料,一股腦放入db中吧?那你的後臺db成什麼樣子了?所以我們要管好我們的後院,不能什麼東西都放到家裡面。
3、成本:
幹什麼事情,我們不能做賠本的買賣。像這種一次性的買賣,我們就要降低成本去做。
為了解決以上問題,我們請出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
看爽了是不是?
後臺回覆“加群”,帶你進入高手如雲交流群
推薦閱讀:
▼
喜歡,就給我一個“在看”
10T 技術資源大放送!包括但不限於:雲端計算、虛擬化、微服務、大資料、網路、Linux、Docker、Kubernetes、Python、Go、C/C++、Shell、PPT 等。在公眾號內回覆「1024」,即可免費獲取!!
本文分享自微信公眾號 - Linux雲端計算網路(cloud_dev)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。
來源:oschina
連結:https://my.oschina.net/u/3872630/blog/4434800