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

[文本处理] [已解决]批处理如何查找出txt文本里每一行内容中重复出现指定次数的字符串?

[复制链接]
 楼主| 发表于 2016-3-8 10:22:27 | 显示全部楼层
本帖最后由 qzwifi 于 2016-3-8 10:25 编辑

回复 6# flyinnet9

是放在同一目录的,里面只有文本换行符的空白文本。
发表于 2016-3-8 10:22:57 | 显示全部楼层
回复 7# qzwifi


    已改
 楼主| 发表于 2016-3-8 10:30:07 | 显示全部楼层
回复 8# flyinnet9

你好,修改的运行后只有第一行可以正确保存。其它的行还是换行符。请给完善一下,非常感谢!
发表于 2016-3-8 11:06:35 | 显示全部楼层
回复 9# qzwifi


    我这边测试没问题,把你的原始文件发过来看看
 楼主| 发表于 2016-3-8 12:03:54 | 显示全部楼层
回复 10# flyinnet9


    你好,如:
01 02 03 04 04 05 05 05 06 06 07 08 09 10 11 11 11 12 12 12
01 03 03 04 04 05 05 06 06 07 07 08 10 10 11 11 12 12 12 13 13 13
01 01 02 03 03 04 04 05 05 06 07 07 07 08 09 09

运行后得:
05 11 12
03 04 06 07 10 13
01 08 09

而正确的应该是:
05 11 12
12 13
07
发表于 2016-3-8 12:19:54 | 显示全部楼层
回复 12# qzwifi


    不会举例麻烦用原始数据!!!!!
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. (for /f "delims=" %%a in (a.txt) do (
  4.   for %%b in (%%a) do (
  5.     set /a #%%b+=1
  6.     if !#%%b!==3 set /p =%%b <nul
  7.   )
  8.   echo.
  9.   for /f "tokens=1-2 delims==" %%c in ('set #') do set %%c=
  10. ))>b.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
qzwifi + 1 OK,谢谢!

查看全部评分

 楼主| 发表于 2016-3-8 12:20:41 | 显示全部楼层
回复 13# happy886rr

你好,非常感谢。你的结果是正确的没错。我自己加保存没有保存下来。
发表于 2016-3-8 12:23:52 | 显示全部楼层
回复 15# qzwifi

  直接拖拽txt到批处理上运行,txt文件路径不要有空格
    那肯定没错啊,因为我把所有要出现的漏洞都考虑进去了,下面是保存的代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. REM 设置重复次数
  4. set N=3
  5. pushd "%~dp0"
  6. (for /f "delims=" %%a in (%1) do (
  7.         for %%b in (%%a) do (
  8.                 if defined #%%b (set /a #%%b+=1) else (set #%%b=1)
  9.         )
  10.         for /f "tokens=1 delims=#=" %%c in ('set #') do (
  11.                 if !#%%c! equ !N! (set /p = %%c <nul)
  12.                 set #%%c=<nul
  13.         )
  14.         echo.
  15. ))>.\b.txt
  16. start .\b.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
qzwifi + 1 OK

查看全部评分

 楼主| 发表于 2016-3-8 12:32:50 | 显示全部楼层
本帖最后由 qzwifi 于 2016-3-8 13:07 编辑

回复 15# happy886rr


    OK
 楼主| 发表于 2016-3-8 12:42:54 | 显示全部楼层
回复 17# happy886rr

可以了,谢谢!
发表于 2016-3-8 14:01:47 | 显示全部楼层
  1. @if (0)==(0) echo off
  2. cscript //nologo //e:jscript "%~0" < a.txt > b.txt
  3. pause & exit
  4. @end

  5. while(!WSH.StdIn.AtEndOfStream){
  6.     var arr = WSH.StdIn.ReadLine().match(/\S+/g);
  7.     if (arr) {
  8.         var m = [], s = arr.sort().join(' ') + ' ';
  9.         s.replace(/(\S+ )\1*/g,
  10.             function(a,b){if(a.split(' ').length == 4) m.push(b)}
  11.         )
  12.         WSH.Echo(m.join(''));
  13.     }
  14. }
复制代码
发表于 2016-3-8 14:04:38 | 显示全部楼层
本帖最后由 WHY 于 2016-3-8 19:30 编辑

test.ps1
  1. get-Content a.txt | `
  2. ?{$_ -NotMatch '^\s*$'} | %{
  3.     $arr = [regex]::Matches($_, '\S+') | %{ $_.Value }
  4.     $arr = $arr | Group | ?{$_.Count -eq 3} | %{ $_.Name }
  5.     $arr -join ' '
  6. }>b.txt
复制代码
发表于 2016-8-10 00:44:48 | 显示全部楼层
本帖最后由 pcl_test 于 2016-8-10 15:51 编辑

第三方http://www.bathome.net/s/tool/index.html?key=gawk
  1. @echo off
  2. rem 指定查找重复的次数
  3. set n=2
  4. gawk -v n=%n% "{delete a;s="";for(i=1; i<=NF; i++)a[$i]++;for(b in a){if(a[b]==n)s=s" "b };print s}" "1.txt">"2.txt"
  5. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 06:39 , Processed in 0.029648 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表