Linux bash:如何将ip列表分组为公共子网?

时间:2017-12-10 14:08:07

标签: linux bash awk ip

我已经排序了很多IP的列表,但我仍然需要将它们分组到子网中。例如:

223.247.184.95
223.247.186.243
223.247.208.16
223.247.209.139
223.84.128.24        
223.84.159.214       *
223.84.159.245       *

市场知识产权与" *"应该全部按照! 223.84.159。*'进行分组。那里 没有数据库,只有这个带有10.000个条目的文本文件!

我测试了awk和uniq命令,但我的结果都不是我想要的。

2 个答案:

答案 0 :(得分:0)

目前尚不清楚,因为您没有显示输出。你可以尝试一下,让我知道如果这对你有帮助,它只会打印出Input_file中包含*的那些行。

awk '$2=="*"{print $1}'  Input_file

答案 1 :(得分:0)

假设您的IP位于名为ips的文件中,该文件分布在不同行的不同字段上,字段分隔符是默认值,即空格。

实施例: cat ips

223.247.184.95 223.247.186.243 223.247.208.16 223.247.209.139 223.84.128.24
223.84.159.214* 223.84.159.245*

然后是

未分类的IP文件:以下awk代码

cat ips | awk '{for(i=1;i<=NF;i++){split($i,a,".");k=a[1]"."a[2]"."a[3];h[k]=h[k]" "$i}}END{for(k in h)printf(k": "h[k]"\n")}'

为您提供了不同C域的哈希表:

223.247.184:  223.247.184.95
223.247.186:  223.247.186.243
223.84.159:  223.84.159.214* 223.84.159.245*
223.84.128:  223.84.128.24
223.247.208:  223.247.208.16
223.247.209:  223.247.209.139

排序的IP文件:如果先前已对包含您的IP的文件进行了排序,那么就会有更高效,更快速的单行

cat ips| awk '{for(i=1;i<=NF;i++){split($i,a,".");cn=a[1]"."a[2]"."a[3]; if(cn != c){c=cn;printf("\n"c": ")};printf($i" ")}}END{printf("\n")}'

给你以及

223.247.184: 223.247.184.95
223.247.186: 223.247.186.243
223.247.208: 223.247.208.16
223.247.209: 223.247.209.139
223.84.128: 223.84.128.24
223.84.159: 223.84.159.214* 223.84.159.245*