标题: [文本处理] 【已解决】批处理如何将前三段相同的ip地址去重复,并将第四段替换成指定字符? [打印本页]
作者: wangdao6699 时间: 2016-1-6 19:31 标题: 【已解决】批处理如何将前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
作者: pcl_test 时间: 2016-1-6 19:50
- @echo off
- for /f %%a in ('more +8 "%~f0"') do (
- if not defined #%%~na (
- echo;%%~na.0-20
- set #%%~na=1
- )
- )
- pause&exit
- 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
复制代码
作者: ksla 时间: 2016-1-6 20:00
一百万个IP内直接使用Excel工作目录建个宏,不用再折腾
作者: CrLf 时间: 2016-1-6 20:01
- @mshta http://bathome.net/s/hta/?%random%^
- o={};^
- type('文本a.txt')^
- .replace(/\d+\.\d+\.\d+/mg,function(m){o[m+'.0-20']=1})^
- names(o).join('\r\n')^
- >文本b.txt
复制代码
作者: gawk 时间: 2016-1-6 20:25
回复 3# ksla
照这个理论,搭个数据库啊,查询速度刚刚的。
作者: gawk 时间: 2016-1-6 20:30
本帖最后由 gawk 于 2016-1-7 15:50 编辑
- gawk "BEGIN{FS=OFS=\".\"}{if(!a[$1.$2.$3]++)print $1,$2,$3,\"0-20\"}" 1.txt > 2.txt
复制代码
经网友测试,以上代码是错误的。修正之后的代码如下:- gawk "BEGIN{FS=OFS=\".\"}{if(!a[$1\"_\"$2\"_\"$3]++)print $1,$2,$3,\"0-20\"}" 1.txt > 2.txt
复制代码
作者: ksla 时间: 2016-1-6 20:33
回复 5# gawk
哥们,,这么有空,帮忙优化下我串代码
帖子:如何提取ping命令结果中响应时间最短的IP并将相关信息输出到hosts文件?
这个主题扣了12分换回来的
作者: gawk 时间: 2016-1-6 21:42
6楼代码里面用到是gawk基础语法,没有涉及到正则表达式。
作者: gawk 时间: 2016-1-6 21:43
回复 7# ksla
可以问问版主是什么原因扣分,避免以后再被扣。
作者: ksla 时间: 2016-1-6 22:25
回复 6# gawk
这条代码收藏了!!
作者: codegay 时间: 2016-1-7 06:51
这两问题代码一样
http://www.bathome.net/thread-38037-1-2.html
http://bbs.bathome.net/thread-38219-1-1.html
作者: ksla 时间: 2016-1-7 11:49 标题: 【已解决】批处理如何将前三段相同的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
出现问题是这条代码!- gawk "BEGIN{FS=OFS=\".\"}{if(!a[$1.$2.$3]++)print $1,$2,$3,\"0-20\"}" 1.txt > 2.txt
复制代码
正确代码为“- gawk "BEGIN{FS=OFS=\".\"}{if(!a[$1\"_\"$2\"_\"$3]++)print $1,$2,$3,\"0-20\"}" 1.txt > 2.txt
复制代码
作者: codegay 时间: 2016-1-7 13:32
你把处理来的结果再处理几一次看看得到的结果是多少。
作者: codegay 时间: 2016-1-7 13:35
本帖最后由 codegay 于 2016-1-7 13:53 编辑
- """
- 依山居 2016年1月7日 13:18:56
- """
- with open("IP.txt") as f:
- txt=f.readlines()
- print("文件总行数:",len(txt))
- ip={'.'.join(r.split(".")[:3]+["0-20\n"]) for r in txt}
- ip=sorted(ip)
- print("处理后的行数:",len(ip))
复制代码
作者: 依山居 时间: 2016-1-7 13:46
本帖最后由 依山居 于 2016-1-7 13:50 编辑
- 文件总行数: 376362
- 处理后的行数: 376362
- 文件总行数: 376362
- 处理后的行数: 376362
-
- 我代码少打了个. 修正后处理的。确实没有重复的。
复制代码
作者: ksla 时间: 2016-1-7 15:21
回复 2# codegay
这个真无去尝试。。。
作者: ksla 时间: 2016-1-7 15:24
回复 4# 依山居
我用了几个大型软件测试过376362行无有重复的
作者: ksla 时间: 2016-1-7 15:32
回复 3# codegay
py脚本是如何输出结果的?
作者: gawk 时间: 2016-1-7 15:51
本帖最后由 gawk 于 2016-1-8 13:30 编辑
代码已经更新,你再试试。
http://bbs.bathome.net/thread-38986-1-1.html#pid180838
作者: ksla 时间: 2016-1-7 16:02
回复 8# gawk
如果有其它不是IP的字符,你的代码会出现一个值...0-20例如:#-------------------中国CN...0-20
作者: gawk 时间: 2016-1-7 16:36
回复 9# ksla
那个代码是根据IP地址的特点编写的,如果要处理其它例外情况,需要根据实际的数据做调整。
作者: ksla 时间: 2016-1-7 17:36
回复 10# gawk
原来这样的...直接再做一个代码删除...0-20会不会好点
作者: gawk 时间: 2016-1-7 19:59
回复 22# ksla
不知道你的原始数据是什么样子,也不知道你希望得到的效果是什么。猜测一行gawk应该够了。
作者: ksla 时间: 2016-1-7 20:12
回复 23# gawk
#---------中国CN
1.1.1.1
2.2.2.2
3.3.3.3
#---------美国EN
4.4.4.4
5.5.5.5
6.6.6.6
作者: wangdao6699 时间: 2016-1-8 08:13
回复 12# ksla
这位兄台能否介绍几个文本处理器,及怎么用的
作者: WHY 时间: 2016-1-8 11:10
回复 24# ksla - gawk -F"." "$0~/^([0-9]+\.){3}[0-9]+$/&&!a[$1\".\"$2\".\"$3]++{print $1\".\"$2\".\"$3\".0-20\"}" IP.txt>IP_new.txt
复制代码
作者: gawk 时间: 2016-1-8 13:28
回复 24# ksla
gawk "BEGIN{FS=OFS=\".\"}/^[0-9]/{if(!a[$1\"_\"$2\"_\"$3]++)print $1,$2,$3,\"0-20\"}" 1.txt > 2.txt
作者: ksla 时间: 2016-1-8 23:05
回复 26# WHY
#---------中国CN
1.1.1.1
2.2.2.2
3.3.3.3
#---------美国EN
4.4.4.4
5.5.5.5
6.6.6.6
如果保留这些行又如何实现??#---------中国CN
#---------中国CN
1.1.1.0-20
2.2.2.0-20
3.3.3.0-20
#---------美国EN
4.4.4.0-20
5.5.5.0-20
6.6.6.0-20
作者: ksla 时间: 2016-1-8 23:06
回复 27# gawk
#---------中国CN
1.1.1.1
2.2.2.2
3.3.3.3
#---------美国EN
4.4.4.4
5.5.5.5
6.6.6.6
如果保留这些行又如何实现??#---------中国CN
#---------中国CN
1.1.1.0-20
2.2.2.0-20
3.3.3.0-20
#---------美国EN
4.4.4.0-20
5.5.5.0-20
6.6.6.0-20
作者: ksla 时间: 2016-1-8 23:07
回复 25# wangdao6699
EmEditorPortable 需要自已研究正规则之类的!!
作者: gawk 时间: 2016-1-9 15:53
回复 29# ksla
gawk "BEGIN{FS=OFS=\".\"}/^[0-9]/{if(!a[$1\"_\"$2\"_\"$3]++)print $1,$2,$3,\"0-20\";next}{print}" 1.txt > 2.txt
作者: WHY 时间: 2016-1-9 21:12
回复 28# ksla - gawk -F"." "{if(/^([0-9]+\.){3}[0-9]+$/){b=$1\".\"$2\".\"$3;if(!a[b]++){print b\".0-20\"}}else{print}}" IP.txt>IP_new.txt
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |