觀察一、先輸出兩個值,其中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表示處理完畢,等待超時結束的請求數。