首页 > 试题广场 >

netstat练习1-查看各个状态的连接数

[编程题]netstat练习1-查看各个状态的连接数
  • 热度指数:11062 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
假设netstat命令运行的结果我们存储在nowcoder.txt里,格式如下:
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:6160            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 172.16.56.200:41856     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:49822     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:49674     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:42316     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:44076     172.16.240.74:6379      ESTABLISHED
tcp        0      0 172.16.56.200:49656     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:58248     100.100.142.4:80        TIME_WAIT
tcp        0      0 172.16.56.200:50108     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:41944     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:35548     100.100.32.118:80       TIME_WAIT
tcp        0      0 172.16.56.200:39024     100.100.45.106:443      TIME_WAIT
tcp        0      0 172.16.56.200:41788     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:58260     100.100.142.4:80        TIME_WAIT
tcp        0      0 172.16.56.200:41812     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:41854     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:58252     100.100.142.4:80        TIME_WAIT
tcp        0      0 172.16.56.200:49586     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:41754     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:50466     120.55.222.235:80       TIME_WAIT
tcp        0      0 172.16.56.200:38514     100.100.142.5:80        TIME_WAIT
tcp        0      0 172.16.56.200:49832     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:52162     100.100.30.25:80        ESTABLISHED
tcp        0      0 172.16.56.200:50372     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:50306     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:49600     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:41908     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:60292     100.100.142.1:80        TIME_WAIT
tcp        0      0 172.16.56.200:37650     100.100.54.133:80       TIME_WAIT
tcp        0      0 172.16.56.200:41938     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:49736     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:41890     172.16.34.144:3306      ESTABLISHED
udp        0      0 127.0.0.1:323           0.0.0.0:*
udp        0      0 0.0.0.0:45881           0.0.0.0:*
udp        0      0 127.0.0.53:53           0.0.0.0:*
udp        0      0 172.16.56.200:68        0.0.0.0:*
udp6       0      0 ::1:323                 :::*
raw6       0      0 :::58                   :::*                    7
现在需要编写shell脚本查看系统tcp连接中各个状态的连接数,并且按照连接数降序输出。你的脚本应该输出如下:
ESTABLISHED 22
TIME_WAIT 9
LISTEN 3

输入描述:
1


输出描述:
1
示例1

输入

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:6160            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 172.16.56.200:41856     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:49822     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:49674     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:42316     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:44076     172.16.240.74:6379      ESTABLISHED
tcp        0      0 172.16.56.200:49656     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:58248     100.100.142.4:80        TIME_WAIT
tcp        0      0 172.16.56.200:50108     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:41944     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:35548     100.100.32.118:80       TIME_WAIT
tcp        0      0 172.16.56.200:39024     100.100.45.106:443      TIME_WAIT
tcp        0      0 172.16.56.200:41788     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:58260     100.100.142.4:80        TIME_WAIT
tcp        0      0 172.16.56.200:41812     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:41854     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:58252     100.100.142.4:80        TIME_WAIT
tcp        0      0 172.16.56.200:49586     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:41754     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:50466     120.55.222.235:80       TIME_WAIT
tcp        0      0 172.16.56.200:38514     100.100.142.5:80        TIME_WAIT
tcp        0      0 172.16.56.200:49832     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:52162     100.100.30.25:80        ESTABLISHED
tcp        0      0 172.16.56.200:50372     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:50306     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:49600     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:41908     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:60292     100.100.142.1:80        TIME_WAIT
tcp        0      0 172.16.56.200:37650     100.100.54.133:80       TIME_WAIT
tcp        0      0 172.16.56.200:41938     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:49736     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:41890     172.16.34.144:3306      ESTABLISHED
udp        0      0 127.0.0.1:323           0.0.0.0:*
udp        0      0 0.0.0.0:45881           0.0.0.0:*
udp        0      0 127.0.0.53:53           0.0.0.0:*
udp        0      0 172.16.56.200:68        0.0.0.0:*
udp6       0      0 ::1:323                 :::*
raw6       0      0 :::58                   :::*                    7

输出

ESTABLISHED 22
TIME_WAIT 9
LISTEN 3
awk
awk '{
    if ($1 == "tcp") {
        arr[$6]++
    }
} END {
    for (i in arr) {
        printf("%s %d\n", i, arr[i])
    }
}' | sort -nrk2
shell
declare -A map
while read line
    do
        tmp=($line)
        [ ${tmp[0]} == "tcp" ] && ((map["${tmp[5]}"]++))
    done < nowcoder.txt
function InsertSort(){
    tmp=()
    for ve in ${map[*]}
        do
            tmp[${#tmp[*]}]=$ve
        done
    q=${#tmp[*]}
    for ((i=0;i<$q;i++))
        do
            for ((j=$i+1;j<$q;j++))
                do
                    if [ ${tmp[$i]} -lt ${tmp[$j]} ];then
                        t=${tmp[$i]}
                        tmp[$i]=${tmp[$j]}
                        tmp[$j]=$t
                    fi
                done
        done
}
InsertSort
for ((i=0; i<q; i++))
    do
        for ve in ${!map[*]}
            do
                if [ ${tmp[$i]} -eq ${map[$ve]} ];then
                    printf "$ve ${map[$ve]}\n"
                fi
            done
    done



发表于 2021-11-26 10:37:59 回复(0)
#cat nowcoder.txt|grep -E "ESTABLISHED|TIME_WAIT|LISTEN"|awk '{print $6}'|sort|uniq -c|sort -nr|awk '{print $2,$1}'
cat nowcoder.txt|grep tcp|awk '{print $6}'|sort|uniq -c|sort -nr|awk '{print $2,$1}'
直接grep对应的连接状态做统计 竟然系统判错 这种输入输出都一致了竟然还判错 觉得不太合理
发表于 2024-03-26 17:20:07 回复(0)
#!/bin/bash
cat nowcoder.txt |grep tcp|awk -F" " '{print $6}'|sort |uniq -c|sort -rn|awk '{print $2,$1}'
发表于 2024-02-27 11:09:11 回复(0)
sed -n '/tcp/p' nowcoder.txt | grep -Eo '(ESTABLISHED|TIME_WAIT|LISTEN)'  | sort | uniq -c |sort -nr| awk '{print $2,$1}'
# awk 加 if
awk '/tcp/{
    if($6=="ESTABLISHED"){SUM++;}
    else if($6=="TIME_WAIT"){SUM1++;}
    else{SUM2++;}
}END{
    print "ESTABLISHED",SUM
    print "TIME_WAIT",SUM1
    print "LISTEN",SUM2
}' nowcoder.txt

编辑于 2024-01-27 12:06:30 回复(0)
grep tcp|awk '{s[$6]++}END{for(i in s)print i,s[i]}'|sort -rn -k2

编辑于 2023-12-08 15:37:37 回复(0)
#!/bin/bash

declare -A map
while read line; do
	arr=($line)
	[[ ${arr[0]} == tcp ]] && ((map[${arr[5]}]++))
done <nowcoder.txt

for i in ${!map[@]}; do
	echo ${i}' '${map[${i}]}
done | sort -nrk2

发表于 2023-10-12 17:01:39 回复(0)
awk '{if(NR > 1 && $1 == "tcp") map[$6]++}END{for(j in map) printf("%s %d\n",j,map[j])}' | sort -k2nr
发表于 2023-09-22 18:48:58 回复(0)
cat nowcoder.txt | grep 'tcp' | awk -F ' ' '{print $6}' | sort | uniq -c | sort -rn | awk '{print $2 " " $1 }'
发表于 2023-08-17 14:31:37 回复(0)
awk '/tcp/ {print $6}' | sort | uniq -c | sort -nr | awk '{print $2" "$1}'


发表于 2023-08-04 15:01:03 回复(0)

cat netstat.txt | grep tcp | grep -E 'ESTABLISHED|TIME_WAIT|LISTEN' | awk '{print $6}' | sort | uniq -c | sort -rn

发表于 2023-06-24 08:19:07 回复(0)
awk '/^tcp.*(ESTABLISHED|TIME_WAIT|LISTEN)/{print $6}' nowcoder.txt | sort | uniq -c | sort -rg | awk '{print $2,$1}'
发表于 2022-09-20 22:27:36 回复(0)

awk数组+sort+正则

awk '/^tcp/{
    a[$6]++;
}
END{
    for(i in a){
        print(i" "a[i])
    }
}' nowcoder.txt | sort -k2nr
发表于 2022-08-27 23:21:52 回复(0)
grep tcp nowcoder.txt | awk '{print $6}' | sort | uniq -c | sort -nr -k 1 | awk '{print $2,$1}'

发表于 2022-08-11 20:59:05 回复(0)
grep 'tcp' | awk '{print $6}' | sort |uniq -c  | sort -k 1  -nr| awk '{print $2" "$1}'
发表于 2022-07-18 14:17:30 回复(2)
awk '/tcp/{a[$NF]++;} END {for(k in a){print k,a[k]}}' nowcoder.txt| sort -nr -k 2 -t " " 
发表于 2022-07-10 16:40:24 回复(0)
awk '/tcp/{print $6}' nowcoder.txt|sort|uniq -c|sort -r -n |awk '{print $2,$1}'
发表于 2022-07-01 15:53:28 回复(0)
sed  '1d' nowcoder.txt | awk '/tcp/{print $6}' | sort | uniq -c | awk '{print $2,$1}' | sort -rnk2

发表于 2022-06-11 21:32:59 回复(0)
cat nowcoder.txt | awk '{print $6}' | sort | uniq -c | sort -r -n -k 1 | grep -v "[5|1]" |awk '{print $2 " " $1}'
发表于 2022-05-25 17:11:49 回复(0)
awk -F " " '$0~/^tcp/{if(NR>1){sum[$6]++}}END{for(x in sum){
    printf("%s %d\n",x,sum[x])
}}' | sort -r -k 2 -n
发表于 2022-05-11 09:58:10 回复(0)
awk '/tcp/{a[$6]++}END{for(i in a)print i,a[i]}' nowcoder.txt | sort -nrk 2

发表于 2022-05-10 16:31:17 回复(0)