返回列表 发帖

【已解决】批处理如何将前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

@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.32COPY
1

评分人数

TOP

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

TOP

@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.txtCOPY
1

评分人数

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

TOP

回复 3# ksla


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

TOP

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

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

评分人数

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

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

TOP

本帖最后由 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))COPY
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

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

TOP

返回列表