找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23336|回复: 1

[文本处理] 如何将相同IP段中C段(第三段)为相连数的IP地址按指定格式合并输出?

[复制链接]
发表于 2016-3-2 15:06:57 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-3-4 19:44 编辑

1.180.160.0
1.180.161.0
1.180.163.0
133.9.228.0
133.9.229.0
1.180.164.0
1.180.165.0
133.9.23.0
133.9.230.0
133.9.231.0
133.9.233.0
133.9.234.0
133.9.235.0
修改后:  
1.180.160.0-1.180.161.255
1.180.163.0-1.180.165.255
133.9.23.0-133.9.23.255
133.9.228.0-133.9.235.255
//参考下之前的,是取C段最小值和最大值生成
http://www.bathome.net/thread-31568-1-1.html
谢谢。

评分

参与人数 1PB -4 收起 理由
pcl_test -4 未按版规发帖

查看全部评分

发表于 2016-3-3 22:35:40 | 显示全部楼层
本帖最后由 WHY 于 2016-3-4 11:50 编辑

改一下,过滤掉文本重复行

基本思路:
1.取IP地址前三列,第3列加上1000,避免按字符排序出错
2.前三列存放到数组,排序
3.遍历数组,相邻两数组比较,前两列相同、第3列相差1或0则认为是连续
  1. @if (0)==(0) echo off
  2. cscript //nologo //e:jscript "%~0" < a.txt
  3. pause & exit
  4. @end

  5. var arr = WSH.StdIn.ReadAll().replace(
  6.     /^(\d+\.\d+\.)(\d+)\.0/mg,
  7.     function(a, b, c){ return b + (c*1 + 1000) }
  8. ).match(/(\d+\.){2}\d+/g);

  9. arr.sort().push('');
  10. var s = '', len = arr.length - 1;

  11. for(var i=0; i<len; i++){

  12.     var x = arr[i].split('.');
  13.     var y = arr[i+1].split('.');

  14.     if(x[0]==y[0] && x[1]==y[1] && (y[2]-x[2]==1 || y[2]-x[2]==0)){
  15.         s += x[2] + ' ' + y[2];
  16.     }else {
  17.         if(s == '') s = x[2];
  18.         var s1 = x[0] + '.' + x[1] + '.' + (s.substr(0,4) - 1000) + '.0';
  19.         var s2 = x[0] + '.' + x[1] + '.' + (s.substr(s.length-4) - 1000) + '.255';
  20.         WSH.Echo(s1 + '-' + s2);
  21.         s = ''
  22.     }
  23. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 02:00 , Processed in 0.017449 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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