计数的所有端口我有一个包含在每一行的CIDR地址和端口的文件:使用AWK,与端口组CIDR,并与相应的CIDR
192.168.1.0/24 3306
192.168.1.0/24 55982
10.10.10.0/24 5800
10.10.10.0/24 39690
10.10.10.0/24 50112
192.168.1.0/24 3308
192.168.1.0/24 3312
192.168.1.0/24 3316
利用GNU awk中4.1.4(Linux系统上),最初的想法是把所有端口上通过CIDR地址分组一条线,所以这个做到了:
awk '{a[$1]=a[$1] ? a[$1]","$2 : $2} END {for (j in a) {print j" over ports: "a[j]}}' file
192.168.1.0/24 over ports: 3306,3308,3312,3316,55982
10.10.10.0/24 over ports: 5800,39690,50112
我也想添加一个计数多少个端口有每个CIDR地址得到这个结果:
192.168.1.0/24 over 5 ports: 3306,3308,3312,3316,55982
10.10.10.0/24 over 3 ports: 5800,39690,50112
我试图把值到阵列和打印出的关键,但伯爵总是出来2.
awk '{a[$1]=a[$1] ? a[$1]","$2 : $2} {h[$1]++;} END {for (i in h) for (j in a) {print j" over "h[i]" ports: "a[j]}}' file
192.168.1.0/24 over 2 ports: 3306,3308,3312,3316,55982
10.10.10.0/24 over 2 ports: 5800,39690,50112
我愿意做其他的事情除了awk的,但它是最好由于具有CIDR /端口的文件数百万行,awk速度很快。有任何想法吗?
这个工程非常快的文件下25MB。当文件比这个大,它开始变慢。当我使用andreatsh答案时,它适用于更大的文件,但对于较小的文件并没有太大的区别。 – RG1