庖丁解牛獲取連接狀態數的awk數組命令

庖丁解牛獲取連接狀態數的命令
3.1 獲取連接狀態數的awk命令

netstat -n |awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

提示:將netstat -n的結果通過管道符交給awk命令處理。
3.2先來執行下netstat -n

[oldboy@LVS-1-1 ~]$ netstat -n|more #截取部分有代表性的內容如下

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local AddressForeign AddressState

tcp00 124.123.3.79:80219.85.194.23:12004SYN_RECV

tcp00 124.123.3.77:80183.8.74.57:3276SYN_RECV

tcp00 124.123.3.77:80124.236.0.214:63191SYN_RECV

tcp00 124.123.3.77:80221.237.233.41:2338TIME_WAIT

tcp01023 124.123.3.77:8061.178.184.222:62683FIN_WAIT1

tcp00 124.123.3.77:80222.79.242.74:7416TIME_WAIT

tcp04839 124.123.3.77:80121.31.42.148:30638FIN_WAIT1

tcp00 124.123.3.77:80183.10.154.60:37282TIME_WAIT

tcp01 124.123.3.77:8059.49.174.176:26913CLOSING

tcp00 124.123.3.77:80120.87.129.35:1787TIME_WAIT

tcp0174 124.123.3.77:80120.71.134.66:1165CLOSING

提示:實際執行這條命令的時候,可能會得到上萬條類似的記錄,我們只取若干來舉例。

3.3拆解awk命令

1)完整命令如下

netstat -n |awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

2awk庖丁解牛

命令拆分

功能說明

/^tcp/

過濾出以tcp開頭的行,“^”爲正則表達式用法,以...開頭,這裏是過濾出以tcp開頭的行。

S[]

定義了一個名叫S的數組,在awk中,數組下標通常從 1 開始,而不是 0

NF

當前記錄裏域個數,默認以空格分隔,如上所示的記錄,NF域個數等於6

$NF

表示一行的最後一個域的值,如上所示的記錄,$NF也就是$6,表示第6個字段的值,也就是SYN_RECVTIME_WAIT等。

S[$NF]

表示數組元素的值,如上所示的記錄,就是S[TIME_WAIT]狀態的連接數

++S[$NF]

表示把某個數加一,如上所示的記錄,就是把S[TIME_WAIT]狀態的連接數加一

END


for(key in S)

遍歷S[]數組

print key,”\t”,S[key]

打印數組的鍵和值,中間用\t製表符分割,顯示好一些。

3)舉個小例子練手

已知test.txt內容:

001 name wodi12k

002 name yingsui 15k

003 name jeacen10k

004 name kuqi8k

005 name yideng10k

006 name xiaofan8k

要求:統計老男孩培訓學生中,不同薪水的學生的數量報表。

[oldboy@test ~]$ cat test.txt |awk '/^00/ {++S[$NF]} END {for (a in S) print a,S[a]}'

15k 1

8k 2

10k 2

12k 1

提示:模擬前面的awk命令,過濾以00開頭的行,然後進行處理。

上述awk數組元素內容:

key=12k S[12K]=1

key=15k S[15K]=1

key=10k S[10K]=2

key=8kS[8K]=2

[oldboy@test ~]$ awk '/^00/ {++S[$NF]} END {for (a in S) print a,S[a]}' test.txt

15k 1

8k 2

10k 2

12k 1

提示:awk可以直接處理文本,因此,不需要去cat,不但不專業,而且內容多時,影響處理效率。


博文來自http://oldboy.blog.51cto.com/2561410/1184165

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章