鱼C论坛

 找回密码
 立即注册
查看: 3640|回复: 6

分组 和 汇聚 的问题

[复制链接]
发表于 2018-1-15 19:00:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
数据集:
————————————
192.168.1.1
192.168.1.2
192.168.1.3
192.168.2.1
192.168.1.101
192.168.1.100
192.168.2.2
192.168.2.3
192.168.3.1
192.168.1.4
————————————


希望输出结果为:
————————————
192.168.1.1-4
192.168.1.100-101
192.168.2.1-3
192.168.3.1
————————————

求大佬们出个主意,c,python,shell,awk  都可以
感谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-15 19:57:02 | 显示全部楼层

回帖奖励 +2 鱼币

这些语言都能搞定的吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-15 20:01:58 | 显示全部楼层
然而现在的问题是,你这数据都是C类ip嘛,而且主机号都是连续的嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-15 20:16:45 | 显示全部楼层
orino 发表于 2018-1-15 20:01
然而现在的问题是,你这数据都是C类ip嘛,而且主机号都是连续的嘛?

不全是C类IP,主机号有连续的,也由单独的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-15 20:23:57 | 显示全部楼层
秋木叶 发表于 2018-1-15 20:16
不全是C类IP,主机号有连续的,也由单独的

现在不清楚你这汇聚是按24掩码汇总还是按其他的汇总,也不知道不连续主机号的输出格式。只能提供一个思路,可以对以上数据进行排序,主关键字为网络号,次关键字为主机号,然后在输出的时候相同网络号的一起输出,当然这是最直接但效率比较低的方法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-16 10:59:48 | 显示全部楼层
orino 发表于 2018-1-15 20:23
现在不清楚你这汇聚是按24掩码汇总还是按其他的汇总,也不知道不连续主机号的输出格式。只能提供一个思路 ...

恩,谢谢,我在试试
按24位掩码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-16 15:53:33 | 显示全部楼层
我用 awk  解决了,谢谢大家的帮助!!
这个是我的方法,仅用于24位掩码,可能存在bug,大牛们多多指正!
#!/bin/awk -f

{
        all[$1] = $1;
        split($1,a,".");
        ipc[a[1]"."a[2]"."a[3]] = a[1]"."a[2]"."a[3];
}

END{
        for(i in ipc) ##遍历 IP c段
        {        
                count = 0;##下一个c段开始时计数归零

                for(j = 1; j < 256; j++) ##检查每一个ip是否存在
                {        
                        if(i"."j in all)##ip存在开始计数,输出标志位为1
                        {
                                k = j;
                                count++; ##连续的个数累加计数
                                flag = 1;
                        }
                        
                        ipb = k - count + 1; ##ip_begin
                        ipe = k;                         ##ip_end

                        if(k != j)##出现不连续的,将计数归零(连续的个数归零)
                        {
                                count = 0;
                        }

                        if( k != j && flag == 1)##将连续的段输出,并将输出标志位为0
                        {
                                if(ipb == ipe)
                                {
                                        print i"."ipb;
                                }
                                else
                                {
                                        print i"."ipb"-"ipe;
                                }

                                flag = 0;
                        }
                }
        }
}

这个是执行结果:
[root@localhost code]# cat ip
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.10
192.168.1.11
192.168.1.15
192.168.1.17
192.168.1.18
192.168.1.19
192.168.2.1
192.168.2.2
192.168.2.3
192.168.2.10
192.168.2.11
10.174.192.2
10.174.192.5
10.174.192.4
[root@localhost code]# ./ip_together.awk ip
10.174.192.2
10.174.192.4-5
192.168.1.1-5
192.168.1.10-11
192.168.1.15
192.168.1.17-19
192.168.2.1-3
192.168.2.10-11
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 21:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表