首页 > 试题广场 >

netstat练习3-输出每个IP的连接数

[编程题]netstat练习3-输出每个IP的连接数
  • 热度指数:11776 时间限制: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.143: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
现在需要你输出每个IP的连接数,按照连接数降序排序。你的脚本应该输出
172.16.0.24 10
172.16.34.144 9
100.100.142.4 3
0.0.0.0 3
172.16.34.143 1
172.16.240.74 1
120.55.222.235 1
100.100.54.133 1
100.100.45.106 1
100.100.32.118 1
100.100.30.25 1
100.100.142.5 1
100.100.142.1 1

cat nowcoder.txt|grep -v "Foreign Address"| awk '$1~/tcp/{print $5}'| awk -F ":" '{arr[$1]+=1}END{for(k in arr)print(k,arr[k])}'|sort -n -r -k 2
发表于 2022-07-17 17:55:21 回复(0)
awk '$1 ~ "tcp" {
sub(":(([0-9]*?)|(\*))","",$5)
iplist[$5]++
}END{
for(i in iplist){
print i" "iplist[i]
}
}' nowcoder.txt |sort -k 2 -r -n
发表于 2022-04-12 11:24:24 回复(0)
纯awk
awk '{
    if ($1 == "tcp") {
        split($5, a, ":")
        t[a[1]]++
    }
} END {
    for (i in t){
        printf("%s %d\n", i, t[i])
    }
}' | sort -nrk2


发表于 2021-11-24 09:35:43 回复(0)
awk -F "[ :]+" '/tcp/{a[$6]++}END{for(i in a)print i,a[i]}' nowcoder.txt | sort -nrk2

发表于 2022-05-10 21:34:33 回复(0)
awk '{if($6!="")a[$5]++}END{for(i in a){print i,a[i]}}' nowcoder.txt | sed -r -e 's/:/ /g' -e '/^[^0-9]/d'|cut -d " " -f1,3 | sort -rnk2
发表于 2025-09-27 16:19:34 回复(0)
cat ../data/netsta_log3.txt | gawk '{print $5}' | egrep "^[0-9]" | gawk -F":" '{print $1}' | sort | uniq -c | sort -nr | sed 's/^[[:space:]]*//' | gawk '{print $2, $1}'
发表于 2024-09-11 14:45:40 回复(0)
cat nowcoder.txt | grep -E 'LISTEN|ESTABLISHED|TIME_WAIT' |awk '{print $5}'| awk -F ':' '{print $1}' | sort | uniq -c | sort -rn | awk '{print $2" " $1}'
发表于 2024-07-04 14:49:17 回复(0)
grep 'tcp' nowcoder.txt|awk '{print $5}' |awk -F ":" '{print $1}'|sort|uniq -c|sort -k 1 -nr|awk '{print $2,$1}'
发表于 2024-06-07 17:47:46 回复(0)
#!/bin/bash

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

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

发表于 2023-10-12 17:27:27 回复(0)
grep -E "tcp"| awk '{print $5}'| awk -F ":" '{print $1}'|sort|uniq -c|sort -k 1 -nr|awk '{print $2,$1}'
发表于 2023-10-03 15:15:52 回复(0)
# 指定多个分隔符(空格和:)
# 多一个加号表明将连续出现的记录分隔符当做一个来处理
grep "tcp" | awk -F '[ :]+' '{print $6}' | sort | uniq -c | sort -nrk 1 | awk '{print $2,$1}'

发表于 2023-09-29 12:50:24 回复(0)
#!/bin/bash
awk '{
    if($6 ~ "ESTABLISHED|TIME_WAIT|LISTEN" ){
        split($5,arr,":")
        tmp[arr[1]]++
    }

}END{
    for(i in tmp){
        print i" "tmp[i]
    }
}' | sort -nr -k2
发表于 2023-06-25 15:50:16 回复(0)
# 方法1
awk -F '[ :]+' '{if($8 ~ /[A-Z\_]+/ && $6 ~ /[0-9\.]+/ ){print $6}}' nowcoder.txt | sort | uniq -c | awk '{print $2" "$1}'| sort -rnk2

# 方法2:
awk -F '[ :]+' 'BEGIN{}{
    if($8 ~ /[A-Z\_]+/ && $6 ~ /[0-9\.]+/){
        dict[$6]++
    }
}END{
    for(each_ip in dict){
        printf("%s %d\n", each_ip, dict[each_ip])
    }
}' nowcoder.txt | sort -rnk2

发表于 2023-03-23 16:44:20 回复(0)
发表于 2023-01-11 16:28:54 回复(0)
cat nowcoder.txt |awk '/^tcp/{print $5}'|awk -F ':' '{print$1}'|sort|uniq -c|sort -nr|awk '{print$2,$1}'
发表于 2022-11-15 16:23:57 回复(0)
cat nowcoder.txt |grep tcp|awk '{print $5}'|cut -d ":" -f 1|sort|uniq -c |sort -r|awk '{print $2,$1}'
所以我这个错在哪里了?自己跑都没问题
发表于 2022-10-24 16:13:21 回复(0)
awk '/^tcp/{print $5}' nowcoder.txt | cut -d : -f 1 | sort | uniq -c | sort -rg | awk '{print $2, $1}'
发表于 2022-09-20 22:56:59 回复(0)
grep "^tcp" nowcoder.txt |awk '{print $5}' |grep -Po '(\d{1,3}.){3}\d{1,3}(?=\:)'|sort|awk '{a[$1]++}END{for(i in a) print i,a[i]}'|sort -k2 -nr
发表于 2022-09-08 15:42:39 回复(0)
# 一行穿
grep tcp nowcoder.txt | awk '{print $5}' | awk -F : '{print $1}' | sort | uniq -c | sort -rn | awk '{print $2,$1}'
发表于 2022-09-04 14:43:12 回复(0)
# awk '$0 ~ "tcp" {if(NR>1){print $5}}' | cut -d ":" -f1|sort | uniq -c \
# | sort -k1nr -k2r | awk '{print $2, $1}'
declare -A mp
while read line; do
    if [[ $line =~ tcp ]]; then
        temp=($line)
        ip=$(echo ${temp[4]} | cut -d ":" -f1)
        ((mp[$ip]+=1))
    fi
done

idx=0
for i in ${!mp[@]}; do
    arr[$idx]=$(echo $i ${mp[$i]})
    let idx++
done
echo ${arr[@]} | xargs -n2 | sort -k2nr -k1r

发表于 2022-09-03 19:52:35 回复(0)