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

[文本处理] [已解决]批处理文件如何去除txt中出现重复的行?

a.txt中:
  1. zzz
  2. zzz
  3. zzz
  4. fajslkjfsakdj
复制代码
生成 b.txt
  1. fajslkjfsakdj
复制代码
1

评分人数

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

本帖最后由 ivor 于 2012-1-16 16:56 编辑
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.         set count=0
  4.         for /f "skip=1 delims=" %%j in (a.txt) do (
  5.                 if %%i EQU %%j (
  6.                         set /a count+=1
  7.                         
  8.                 )
  9.         
  10.         )
  11.         if NOT !count! GEQ 2 echo %%i>>b.txt
  12. )
复制代码
下面的代码大幅度优化比较的速度,经测试1000行重复字符串,比上个代码快了30倍
  1. @echo off & setlocal enabledelayedexpansion
  2. set Count=0
  3. for /f "delims=" %%i in (a.txt) do (
  4.         
  5.         call :cmp
  6.         if !Count! EQU 1 echo %%i >>b.txt
  7. set Count=0
  8. )
  9. echo.已经成功执行完了 & pause>nul
  10. goto :EOF
  11. :cmp
  12. for /f "skip=1 delims=" %%j in (a.txt) do (
  13.                 if %%i EQU %%j (
  14.                         set /a Count+=1
  15.                         if !Count! EQU 2 goto :EOF
  16.                 )
  17. )
复制代码
1

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

回复 2# ivor


    应验了那句话:“一年逛两次bathome,每次总有新发现”,bat代码真强大!

TOP

回复 2# ivor


    谢谢!

TOP

回复 2# ivor


这种去除重复行的题目出现过不少次,一般推荐用 set /a ".%%a+=1" + set.|find "=1" (经典)或set %%a=. + if defined (快速)的组合或者用 sort + if %%a==!lastline!(稳妥),速度都比 for 嵌套快很多,推荐搜索一下,必有收获~

TOP

本帖最后由 ivor 于 2012-1-14 02:51 编辑

惭愧,谢谢版主提醒,下次多search
http://bbs.bathome.net/viewthrea ... D%D6%D8%B8%B4%D0%D0
  1. @echo off
  2. (for /f "delims=" %%a in (1.txt) do (
  3.    if not defined "%%a" echo %%a&set ""%%a"=a"
  4. ))>new.txt
复制代码

TOP

回复 6# ivor


这个代码跟楼主的需求不符吧?

TOP

回复 2# ivor


pause改成goto :eof是不是更合适?

TOP

回复 9# find


    恩        确实忘了加个退出,已经补上了,谢谢

TOP

回复 1# batpro
  1. gawk "{a[$0]++}END{for(i in a)if(a[i]==1)print i}" a.txt >b.txt
复制代码

TOP

回复 6# ivor

感谢大佬的代码,成功解决问题

TOP

返回列表