标题: [文本处理] 批处理如何把重复的行只保留一次? [打印本页]
作者: ngd 时间: 2016-2-27 16:28 标题: 批处理如何把重复的行只保留一次?
a.txt内容如下:
123
456
789
123
123
789
获取重复的行,并且重复的行只保留一次,处理后得到b.txt内容如下:
123
789
————————————————————————- @echo off
- for /f "delims=" %%i in (a.txt) do (
- set /a _%%i+=1
- )
- (for /f "tokens=1-2 delims=_=" %%i in ('set _') do (
- if %%j gtr 1 (
- echo,%%i
- )
- ))>b.txt
复制代码
这段代码可以用,但是我没看懂,第二个for中 'set _' 单引号里面是命令,但如果单独执行 set_是执行不了的,求点拨
作者: ivor 时间: 2016-2-27 16:47
回复 1# ngd
set_ 显示所有_开头的变量
set /a _%%i+=1 变量赋值前面带_,如果有重复的结果肯定大于1,就可以得出结果了
作者: ngd 时间: 2016-2-27 19:39
回复 3# ivor
set_ 显示所有_开头的变量
原来还有这样的用法 顿悟 万分感谢!
作者: /zhqsystem/zhq 时间: 2016-2-28 14:16
for /f "delims=" %%i in ('type "%~f1"')do if not defined %%i (
set "%%i=y"
(echo,%%i)>>"%~dp1new_%~nx1"
)
有局限性谨慎使用
作者: codegay 时间: 2016-2-29 06:10
- """
- 获取重复的行并且重复的行只保留一次.py
- http://bbs.bathome.net/thread-39502-1-1.html
- 2016年2月28日 03:57:29 codegay
- 通过help(list),可见python序列有count方法.
- -_-基础教程应该有说到的,估计是学过就忘记了.
- python3
- """
- #a.txt内容必须是任意但是有重复行的内容。
- #我使用的是一列IP地址进行测试的.
- with open("a.txt") as f:
- txt=f.readlines()
-
- #方法一 集合解析,缺点集合无序,不会保持原来的先后顺序
- results={r for r in txt if (txt.count(r) >= 2)}
- print("一:",results)
-
- #方法二 map filter lambda ,
- b=[]
- a=map(lambda y:b.append(y) if (y not in b) else None,filter(lambda x:(txt.count(x) >= 2),txt))
- list(a)#python3中map等函数返回成生成器,需要list或者for 历遍到的时候才进行计算结果。
- print("二:",b)
-
- #方法三
- l2=[r for r in txt if txt.count(r)>=2]
- result3=[]
- [result3.append(r) for r in l2 if r not in result3]
- print("三:",result3)
-
- #方法4 字典 不保持原先后顺序
- dd={r:txt.count(r) for r in txt}
- ll=[k for k,v in dd.items() if v>=2]
- print("4",ll)
复制代码
作者: ngd 时间: 2016-5-9 15:07
回复 4# /zhqsystem/zhq
局限性在哪?
作者: /zhqsystem/zhq 时间: 2016-5-9 20:51
回复 6# ngd
变量设置判断
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |