對一條常用命令(netstat結合awk統計TCP連接數)的理解

 觀察一、先輸出兩個值,其中NF爲awk正在處理記錄(行)的字段總數,$NF爲每行最後一個字段的值

# netstat -na |awk '/^tcp/ {print NF,$NF}'
6 LISTEN
6 LISTEN
6 LISTEN
6 LISTEN
6 LISTEN
6 LISTEN
6 LISTEN
6 LISTEN
6 LISTEN
6 LISTEN
6 TIME_WAIT
6 TIME_WAIT
6 TIME_WAIT
6 TIME_WAIT
6 ESTABLISHED
6 ESTABLISHED
6 ESTABLISHED
6 ESTABLISHED
6 ESTABLISHED
6 TIME_WAIT
6 TIME_WAIT
6 LISTEN
6 LISTEN
6 ESTABLISHED

觀察二、如下命令輸出4個值,注意前後倆字段的值是怎麼來的。。。S[LISTEN], ++S[LISTEN]

# netstat -na |awk '/^tcp/ {print NF,$NF,S[$NF],++S[$NF]}'
6 LISTEN   1
6 LISTEN 1 2
6 LISTEN 2 3
6 LISTEN 3 4
6 LISTEN 4 5
6 LISTEN 5 6
6 LISTEN 6 7
6 LISTEN 7 8
6 LISTEN 8 9
6 LISTEN 9 10
6 TIME_WAIT  1
6 ESTABLISHED  1
6 TIME_WAIT 1 2
6 TIME_WAIT 2 3
6 TIME_WAIT 3 4
6 ESTABLISHED 1 2
6 ESTABLISHED 2 3
6 ESTABLISHED 3 4
6 ESTABLISHED 4 5
6 LISTEN 10 11
6 LISTEN 11 12
6 ESTABLISHED 5 6

觀察三、利用awk的行處理特性,遍歷了所有tcp開頭的行。定義出不同狀態命名的數組下標,並分別++計數賦值給數組元素,最後打印$NF和數組S[$NF]的值。觀察粗體部分

 # netstat -na | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 4
ESTABLISHED 6
LISTEN 12

SYN_RECV表示正在等待處理的請求數;
ESTABLISHED表示正常數據傳輸狀態;
TIME_WAIT表示處理完畢,等待超時結束的請求數。

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