[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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
谢谢。
1

评分人数

本帖最后由 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. }
复制代码

TOP

返回列表