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

[文本处理] 批处理如何找出文本中的相同内容并找出重复了多少次

有一文本文档,里面装的是N个电话号码,然后有些电话号码是重复的,
现在就是要把那些重复的号码找出来,并找出重复了多少次。
在此请高手赐教。

最好能给个那种直接保存就能用的代码
我是新手  太新了
还请见谅啊

感激不尽了

附件如下。

  1. @echo off
  2. for /f %%i in (_find.txt) do if defined _%%i (set/a _%%i+=1) else (set/a _%%i=0)
  3. for /f "tokens=1,2 delims=_=" %%i in ('set _') do if %%j neq 0 echo %%i重复%%j次
  4. pause
复制代码

TOP

  演示代码,没有把结果导出到文本中,若需要把结果导出文本文件,请跟帖说明:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set Phone=
  4. set repat=1
  5. for /f %%i in ('sort find.txt') do (
  6.     if "!Phone!"=="%%i" (
  7.         set /a repeat+=1
  8.     ) else (
  9.         if !repeat! gtr 1 echo 电话号码 !Phone! 出现了 !repeat! 次
  10.         set repeat=1
  11.     )
  12.     set Phone=%%i
  13. )
  14. if !repeat! gtr 1 echo 电话号码 !Phone! 出现了 !repeat! 次
  15. pause
复制代码
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

LS的if defined检验似乎并没有起到多大的作用,可以省略,效率略高
  1. @echo off
  2. for /f %%i in (find.txt) do set/a _%%i+=1
  3. for /f "tokens=1,2 delims=_=" %%i in ('set _') do if %%j neq 1 echo %%i重复%%j次
  4. pause
复制代码

TOP

回复 4楼 的帖子

确实如此,思维定势,多此一举了
不过JM的代码效率是高了很多,我测试了一下并不是多了一个for造成的,而是第一个for多了很多时间,与JM不同的是我的占用了很多变量在内存中。楼主文本中只有5000来条记录,效率就有了很大不同。看来以后要注意这方面了。

TOP

受教了
多谢各位大侠了

o(∩_∩)o...

TOP

  大量设置变量的做法十分耗费内存,是拖慢速度的主因,当变量越多,缺点越明显,尽可能得少设置变量,是提高速度的一大法宝。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

回复 4楼 的帖子

似乎应该把代码中的“重复”改为“出现”吧?或者改为“重复了%%j-1次”。
Still with wax

TOP

太好了,好好看看~谢谢楼上的朋友们

TOP

不适合我哦,上面的基础上,怎样查找某个字 出现了几次呢? 小弟初学,如有会的朋友能答复就好了,先谢谢了

TOP

返回列表