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

[文本处理] 批处理怎样统计文本中重复行所在的行号?

统计文本文件中重复行的批处理,统计重复内容所在行号。
感觉方法有点乱,但没想出更好的处理方法了。
  1. ::---------以下代码用于生成测试文本---------
  2. @echo off
  3. del testFileName.txt>nul 2>nul
  4. echo 正在生成测试文本!
  5. for /l %%a in (1,1,100) do (
  6. >>testFileName.txt call echo %%random:~,2%%
  7. )
  8. cls
  9. ::---------以上代码用于生成测试文本---------
  10. @ECHO OFF
  11. SETLOCAL ENABLEDELAYEDEXPANSION
  12. mode con: cols=45 lines=4
  13. title CodeBy 0428_hai CMD@XP 2011-04-26
  14. set fileName=testFileName.txt
  15. del temp>nul 2>nul
  16. del temp.txt>nul 2>nul
  17. del result.txt>nul 2>nul
  18. if not exist "%fileName%" set sec=0 & goto :end
  19. for /f "delims=" %%a in (%fileName%) do (
  20. set /a sn+=1
  21. >>temp echo !sn! %%a
  22. )
  23. copy temp _%fileName%>nul
  24. call :times %time:~,-3% sec_Start
  25. :main
  26. if not exist temp goto :end
  27. for /f "tokens=1* delims= " %%a in (temp) do (
  28. call :count !sn!
  29. set sn=
  30. for /f "skip=1 tokens=1* delims= " %%A in (temp) do (
  31. cls
  32. echo 大约还需要进行 !count! 次运算!
  33. echo 当前时间:!time!
  34. call :times !time:~,-3! sec_Cur
  35. set /a sec=!sec_Cur!-!sec_Start!
  36. echo 已用时间:!sec! 秒
  37. set /a count-=1
  38. if "%%b" == "%%B" (
  39. set var=!var!%%A
  40. ) else (
  41. >>temp.txt echo %%A %%B
  42. set /a sn+=1
  43. )
  44. )
  45. cls
  46. if defined var >>result.txt echo 第 %%a !var!行出现了%%b!
  47. set var=
  48. del temp>nul 2>nul
  49. ren temp.txt temp>nul 2>nul
  50. goto :main
  51. )
  52. :end
  53. if exist result.txt (
  54. echo 操作已完成,查询结果保存在result.txt文件中!
  55. start "" result.txt
  56. ) else (
  57. echo 在文件中没有查到重复行!
  58. )
  59. echo 使用时间:!sec! 秒!
  60. pause>nul
  61. exit
  62. :count
  63. set /a count=%1-1
  64. set /a count=%1*%count%/2
  65. goto :eof
  66. :times
  67. for /f "tokens=1,2,3 delims=:" %%a in ("%1") do (
  68. set /a sec=1%%c%%100
  69. set /a min=1%%b%%100
  70. set /a %2=%%a*3600+!min!*60+!sec!
  71. )
  72. goto :eof
复制代码

100行无重复数据用时39秒,平均速度约127次/秒。

TOP

返回列表