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

【已解决】批处理如何将前3段相同的ip地址去重复,并将第4段替换成指定字符?

本帖最后由 pcl_test 于 2016-7-18 12:22 编辑

删除前3列相同ip地址,第四列全部并替换为0-20
文本a:
58.217.200.13
58.217.200.15  
220.181.185.141
58.217.200.37   
61.135.185.31  
123.126.99.31
61.135.185.32
输出文本b:
58.217.200.0-20  
220.181.185.0-20  
61.135.185.0-20  
123.126.99.0-20
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

TOP

  1. @echo off
  2. for /f %%a in ('more +8 "%~f0"') do (
  3.     if not defined #%%~na (
  4.         echo;%%~na.0-20
  5.         set #%%~na=1
  6.     )
  7. )
  8. pause&exit
  9. 58.217.200.13
  10. 58.217.200.15  
  11. 220.181.185.141
  12. 58.217.200.37   
  13. 61.135.185.31  
  14. 123.126.99.31
  15. 61.135.185.32
复制代码
1

评分人数

TOP

一百万个IP内直接使用Excel工作目录建个宏,不用再折腾

TOP

  1. @mshta http://bathome.net/s/hta/?%random%^
  2. o={};^
  3. type('文本a.txt')^
  4. .replace(/\d+\.\d+\.\d+/mg,function(m){o[m+'.0-20']=1})^
  5. names(o).join('\r\n')^
  6. >文本b.txt
复制代码
1

评分人数

    • wangdao6699: 正则表达式用的炉火纯青,赞一个技术 + 1

TOP

回复 3# ksla


    照这个理论,搭个数据库啊,查询速度刚刚的。
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

本帖最后由 gawk 于 2016-1-7 15:50 编辑
  1. gawk "BEGIN{FS=OFS=\".\"}{if(!a[$1.$2.$3]++)print $1,$2,$3,\"0-20\"}" 1.txt > 2.txt
复制代码
经网友测试,以上代码是错误的。修正之后的代码如下:
  1. gawk "BEGIN{FS=OFS=\".\"}{if(!a[$1\"_\"$2\"_\"$3]++)print $1,$2,$3,\"0-20\"}" 1.txt > 2.txt
复制代码
1

评分人数

    • wangdao6699: 很喜欢,第三方工具,就是正则表达式太难了技术 + 1
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

回复 5# gawk


    哥们,,这么有空,帮忙优化下我串代码


帖子:如何提取ping命令结果中响应时间最短的IP并将相关信息输出到hosts文件?

这个主题扣了12分换回来的

TOP

6楼代码里面用到是gawk基础语法,没有涉及到正则表达式。
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

回复 7# ksla


    可以问问版主是什么原因扣分,避免以后再被扣。
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

回复 6# gawk


    这条代码收藏了!!

TOP

1

评分人数

去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

[文本处理] 【已解决】批处理如何将前三段相同的ip地址去重复,并将第四段替换成指定字符?

本帖最后由 pcl_test 于 2016-9-18 18:53 编辑

昨天有位人兄发帖需要以下功能!下面的代码能实现!

这个代码里的功能对我并无有用处,因为很多文本处理器可以完美做到,一千多万行也是几秒的事,但今天使用了一下!发现了漏掉问题

本人用的是gawk 4.1.3,windows10

对一个有376362行的文本进行处理,去重并将第四列替换为0-20后得出365993行,漏掉了10369行!!xxx.xxx.xxx.0-20得出的结果是以IP范围为格式,所以再乘20等于漏掉了207380个IP

可能有人会认为376362个IP有重复,但这376362行IP是无有重复的,格式为xxx.xxx.xxx.0



大家可以测试一下!
http://pan.baidu.com/s/1gdRzB6F

删除前3列相同ip地址,去重并将第四列替换为0-20
文本1:
58.217.200.13
58.217.200.15  
220.181.185.141
58.217.200.37   
61.135.185.31  
123.126.99.31
61.135.185.32
输出文本2:
58.217.200.0-20  
220.181.185.0-20  
61.135.185.0-20  
123.126.99.0-20

出现问题是这条代码!
  1. gawk "BEGIN{FS=OFS=\".\"}{if(!a[$1.$2.$3]++)print $1,$2,$3,\"0-20\"}" 1.txt > 2.txt
复制代码
正确代码为“
  1. gawk "BEGIN{FS=OFS=\".\"}{if(!a[$1\"_\"$2\"_\"$3]++)print $1,$2,$3,\"0-20\"}" 1.txt > 2.txt
复制代码
1

评分人数

    • wangdao6699: 感谢兄台测试,修改,优化代码技术 + 1

你把处理来的结果再处理几一次看看得到的结果是多少。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

本帖最后由 codegay 于 2016-1-7 13:53 编辑
  1. """
  2. 依山居 2016年1月7日 13:18:56
  3. """
  4. with open("IP.txt") as f:
  5.     txt=f.readlines()
  6. print("文件总行数:",len(txt))
  7. ip={'.'.join(r.split(".")[:3]+["0-20\n"]) for r in txt}
  8. ip=sorted(ip)
  9. print("处理后的行数:",len(ip))
复制代码
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

本帖最后由 依山居 于 2016-1-7 13:50 编辑
  1. 文件总行数: 376362
  2. 处理后的行数: 376362
  3. 文件总行数: 376362
  4. 处理后的行数: 376362
  5. 我代码少打了个. 修正后处理的。确实没有重复的。
复制代码
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

返回列表