1. 程式人生 > 實用技巧 >awk,真的是一款牛逼的神器!

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             Statetcp        0      0 0.0.0.0:3306           0.0.0.0:*                   LISTEN
tcp 1 1 0.0.0.0:80 0.0.0.0:* LISTENtcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTENtcp 0 0 yuedu.com:80 124.205.5.146:18245 TIME_WAITtcp 0 0 yuedu.com:80 61.140.101.185:37538 FIN_WAIT2tcp 0 0 yuedu.com:80 110.194.134.189:1032 ESTABLISHEDtcp 0 0 yuedu.com:80 123.169.124.111:49809 ESTABLISHEDtcp 0 0 yuedu.com:80 116.234.127.77:11502 FIN_WAIT2tcp 0 0 yuedu.com:80 123.169.124.111:49829 ESTABLISHEDtcp 0 0 yuedu.com:80 183.60.215.36:36970 TIME_WAITtcp 0 4166 yuedu.com:80 61.148.242.38:30901 ESTABLISHEDtcp 0 1 yuedu.com:80 124.152.181.209:26825 FIN_WAIT1tcp 0 0 yuedu.com:80 110.194.134.189:4796 ESTABLISHEDtcp 0 0 yuedu.com:80 183.60.212.163:51082 TIME_WAITtcp 0 1 yuedu.com:80 208.115.113.92:50601 LAST_ACKtcp 0 0 yuedu.com:80 123.169.124.111:49840 ESTABLISHEDtcp 0 0 yuedu.com:80 117.136.20.85:50025 FIN_WAIT2tcp 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             Statetcp        1      1 0.0.0.0:80             0.0.0.0:*                   LISTEN

看爽了是不是?


後臺回覆“加群”,帶你進入高手如雲交流群


推薦閱讀:

什麼是物聯網?這裡有你需要了解的一切

網路通訊中的幾種握手

【趣圖】程式設計師一樂!

Kubernetes的架構為什麼是這個樣的?

任何人都能看得懂的網路協議之ARP

用好你的網路瑞士軍刀netcat

一次Linux系統被攻擊的分析過程

Linux下刪除大量檔案效率對比

130 個相見恨晚的神器網站

分享20個Linux命令小貼士與技巧

一文帶你徹底理解檔案系統

5G與Wi-Fi6空口技術對

牛逼的Linux效能剖析—perf

HTTPS 的 7 次握手以及 9 倍時延

一文搞定 UDP 和 TCP 高頻面試題!



喜歡,就給我一個“在看”


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