首页 > 试题广场 >

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

[编程题]netstat练习1-查看各个状态的连接数
  • 热度指数:11183 时间限制: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
#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

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 '/tcp/ {print $6}' | sort | uniq -c | sort -nr | awk '{print $2" "$1}'


发表于 2023-08-04 15:01:03 回复(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)
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)
awk '{if($1=="tcp"){status[$6]++}} END{for(i in status){print i,status[i]}}'|sort -nrk2

发表于 2022-04-30 10:18:37 回复(0)
grep "tcp" nowcoder.txt|awk '{print $6}'|sort |uniq -c|sort -nr|awk '{print $2,$1}' 
发表于 2022-04-25 16:35:14 回复(0)
cat nowcoder.txt|grep tcp|awk '{a[$6]+=1};END{for(x in a) print x,a[x]}'|sort -nk2 -r
先过滤出tcp,然后根据第六列进行统计(这块看不懂看shell的第10题,然后用sort进行排序。-n数字排序,-k第二列,-r降序)
发表于 2022-04-05 16:38:53 回复(0)
grep 'tcp' nowcoder.txt|awk '{print $6}'|sort|uniq -c|sort -nr|awk '{print $2" "$1}'# sort -n纯数字排列
发表于 2022-03-22 22:29:36 回复(0)
grep tcp|awk '{state[$NF]++}END{for(i in state){print i" "state[i]}}'|sort -k2 -nr
发表于 2022-03-09 15:13:23 回复(0)

问题信息

难度:
36条回答 684浏览

热门推荐

通过挑战的用户

查看代码