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

[文本处理] [已解决]批处理怎样合并两个文本到新文件并删除重复行(重复内容只保留一个)?

本帖最后由 pcl_test 于 2016-8-8 14:57 编辑

两个文本文件A.txt和B.txt,每个文件内容都只有一列,需合并两个文件的内容到新文件C.TXT并删除重复行(重复内容只保留一个).示例如下:
A.txt的内容:
111
222
333
444
555
666


B.txt的内容:
444
555
666
777
888
999


合并并删除重复行后的C.txt应该是:

111 ┐

222 │
333 ────> A.Txt的内容
444 │┐┐
555 │┼┼──>A.TXT和B.TXT共有的重复内容(删除重复,作唯一化)
666 ┘┘│
777         ├──>B.TXT的内容
888         
999 ──

即合并追加两文件列表内容,并删除重复行作唯一化处理(红色部分代表重复内容),求教.

搜索原论坛帖子,整理出有两种方法可以实现,总结如下代码:
  1. @echo off
  2. set begin=%time%
  3. cd.>c.txt
  4. REM 方法一,测试花费时间在2毫秒左右
  5. REM 结果:
  6. REM 花费时间: 0 小时 0 分钟 0 秒 2 毫秒
  7. for /f "eol= delims=" %%a in (a.txt b.txt) do @if not defined %%a @(set "%%a=1" & echo %%a >> c.txt)
  8. REM 方法二,测试花费时间在55秒左右
  9. REM 结果:
  10. REM 完成,共花费时间: 0 小时 0 分钟 0 秒 54 毫秒
  11. REM for /f "delims=" %%i in (A.txt B.txt) do (
  12. REM find /i "%%i" C.txt||echo %%i>>C.txt
  13. REM )
  14. call :time0 %begin% %time% duration
  15. cls
  16. echo 完成,共花费时间: %duration%
  17. pause
  18. goto :eof
  19. :time0
  20. ::计算时间差(封装)
  21. @echo off&setlocal&set /a n=0&rem code 随风 @bbs.bathome.net
  22. for /f "tokens=1-8 delims=.: " %%a in ("%~1:%~2") do (
  23. set /a n+=10%%a%%100*360000+10%%b%%100*6000+10%%c%%100*100+10%%d%%100
  24. set /a n-=10%%e%%100*360000+10%%f%%100*6000+10%%g%%100*100+10%%h%%100)
  25. set /a s=n/360000,n=n%%360000,f=n/6000,n=n%%6000,m=n/100,n=n%%100
  26. set "ok=%s% 小时 %f% 分钟 %m% 秒 %n% 毫秒"
  27. endlocal&set %~3=%ok:-=%&goto :EOF
复制代码
[ 本帖最后由 dejoy 于 2010-8-29 09:21 编辑 ]

第三方
  1. gawk "!a[$0]++" "a.txt" "b.txt">"c.txt"
复制代码

TOP

你的第一个方法很好,我也搜藏有,给你再补一个:
  1. type 1.txt>>test.txt
  2. type 2.txt>>test.txt
  3. setlocal enabledelayedexpansion
  4. set /p wb1=请输入处理后生成的[路径]文本:
  5. for /f "delims=" %%a in ('sort  test.txt') do (
  6. if not %%a equ !b! echo %%a>>过滤.txt
  7. set b=%%a)
复制代码
原始代码不懂是谁写的了,很好,搜藏!~

TOP

返回列表