标题: [文本处理] [已解决]批处理文件如何去除txt中出现重复的行? [打印本页]
作者: batpro 时间: 2012-1-13 20:00 标题: [已解决]批处理文件如何去除txt中出现重复的行?
a.txt中:- zzz
- zzz
- zzz
- fajslkjfsakdj
复制代码
生成 b.txt复制代码
作者: ivor 时间: 2012-1-13 20:15
本帖最后由 ivor 于 2012-1-16 16:56 编辑
- @echo off & setlocal enabledelayedexpansion
- for /f "delims=" %%i in (a.txt) do (
- set count=0
- for /f "skip=1 delims=" %%j in (a.txt) do (
- if %%i EQU %%j (
- set /a count+=1
-
- )
-
- )
- if NOT !count! GEQ 2 echo %%i>>b.txt
- )
复制代码
下面的代码大幅度优化比较的速度,经测试1000行重复字符串,比上个代码快了30倍- @echo off & setlocal enabledelayedexpansion
-
- set Count=0
- for /f "delims=" %%i in (a.txt) do (
-
- call :cmp
- if !Count! EQU 1 echo %%i >>b.txt
- set Count=0
- )
-
- echo.已经成功执行完了 & pause>nul
- goto :EOF
-
- :cmp
-
- for /f "skip=1 delims=" %%j in (a.txt) do (
-
- if %%i EQU %%j (
- set /a Count+=1
- if !Count! EQU 2 goto :EOF
- )
-
- )
-
-
复制代码
作者: batpro 时间: 2012-1-13 21:28
回复 2# ivor
应验了那句话:“一年逛两次bathome,每次总有新发现”,bat代码真强大!
作者: batpro 时间: 2012-1-13 21:30
回复 2# ivor
谢谢!
作者: CrLf 时间: 2012-1-14 00:57
回复 2# ivor
这种去除重复行的题目出现过不少次,一般推荐用 set /a ".%%a+=1" + set.|find "=1" (经典)或set %%a=. + if defined (快速)的组合或者用 sort + if %%a==!lastline!(稳妥),速度都比 for 嵌套快很多,推荐搜索一下,必有收获~
作者: ivor 时间: 2012-1-14 02:49
本帖最后由 ivor 于 2012-1-14 02:51 编辑
惭愧,谢谢版主提醒,下次多search
http://bbs.bathome.net/viewthrea ... D%D6%D8%B8%B4%D0%D0- @echo off
-
- (for /f "delims=" %%a in (1.txt) do (
-
- if not defined "%%a" echo %%a&set ""%%a"=a"
-
- ))>new.txt
复制代码
作者: find 时间: 2012-1-16 09:26
回复 6# ivor
这个代码跟楼主的需求不符吧?
作者: find 时间: 2012-1-16 09:33
回复 2# ivor
pause改成goto :eof是不是更合适?
作者: ivor 时间: 2012-1-16 16:53
回复 9# find
恩 确实忘了加个退出,已经补上了,谢谢
作者: find 时间: 2012-1-16 19:40
回复 1# batpro - gawk "{a[$0]++}END{for(i in a)if(a[i]==1)print i}" a.txt >b.txt
复制代码
作者: Xyloebll 时间: 2023-5-31 20:47
回复 6# ivor
感谢大佬的代码,成功解决问题
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |