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

[文本处理] [已解决]批处理如何查找txt文本中每行同一/相同字符串出现最多的次数等于指定数值的行

本帖最后由 pcl_test 于 2016-8-4 13:22 编辑

批处理如何查找文本行字串指定出现次数的行。
例:
a.txt文本内容为:
01 01 02 03
01 01 01 02 03
01 01 01 01 02 03
01 01 01 01 01 02 03
01 01 02 02 03
01 01 01 02 02 02 03 03 03
01 01 01 01 02 02 02 02
03 01 03 03 03 02 02 01 03 01
01 02 03 03 02 01 01 03
01 03 02 01 02
忽略字串排列次序不规则的情况,只要每一行有任意一个字串出现最多的次数等于输入的想要查找出现的次数值,把该行输出到b.txt。
每行不同字串出现次数分别叠加计算,比如:01 02 03 03 02 01 01 03 这一行里面01、03都分别出现三次,02出现两次。忽略02出现两次的记录,取出现次数最多的。
可以理解为在每一行里只记录查找同一/相同个字串出现最多的次数,。

如:
(一)我在代码中输入最多的出现次数值2,得出保存b.txt的结果是:
01 01 02 03
01 01 02 02 03
01 03 02 01 02
在a.txt文本内容中只有这三行行内同一字串出现过最多次数为两次,其它的行都有同一字串最多出现过两次以上的。
------------------
(二)我在代码中输入最多的出现次数值3,得出保存b.txt的结果是:
01 01 01 02 03
01 01 01 02 02 02 03 03 03
01 02 03 03 02 01 01 03
在a.txt文本内容中只有这三行行内同一字串出现过最多次数为三次,其它的行同一字串要么最多出现过两次要么出现三次以上。
以此类推查找出现四次、五次...。
====================================

以下是查找文本行个数(长度)的代码:
  1. gawk "NF==次数" a.txt >b.txt
复制代码
思路和这个有类似之处,只不过要提取的不是个数(长度)而是字串出现次数的行。
1

评分人数

    • pcl_test: 渣渣的描述,长还描述不清PB -8

bat能实现吗?

TOP

本帖最后由 pcl_test 于 2016-7-6 19:22 编辑
  1. @echo off
  2. rem 指定查找每行同一字符串出现最多的次数
  3. set n=2
  4. for /f "delims=" %%a in ('more +15 "%~f0"') do (
  5.     setlocal enabledelayedexpansion
  6.     set t=0
  7.     for %%b in (%%a) do (
  8.         set /a #%%b+=1
  9.         if !#%%b! gtr !t! set t=!#%%b!
  10.     )
  11.     if !t! equ !n! echo;%%a
  12.     endlocal
  13. )
  14. pause&exit
  15. ::举个栗子
  16. 01 01 02 03
  17. 01 01 01 02 03
  18. 01 01 01 01 02 03
  19. 01 01 01 01 01 02 03
  20. 01 01 02 02 03
  21. 01 01 01 02 02 02 03 03 03
  22. 01 01 01 01 02 02 02 02
  23. 03 01 03 03 03 02 02 01 03 01
  24. 01 02 03 03 02 01 01 03
  25. 01 03 02 01 02
复制代码

TOP

本帖最后由 qzwifi 于 2016-7-6 13:06 编辑

回复 3# pcl_test


    的确很渣的描述,见笑了。我为什么就想不到你修改后的这标题呢。够犀利!

    代码试过了,是正确的。起码处理的行数量较少时是正确的。处理比较大的数据时(当前是2.04mb,行数是四万行左右)就光标一直闪找不出来,已经持续两个多小时无变化!

    有没有gawk之类速度快的呢?再写一下处理a.txt,保存b.txt,因为处理的数据库文件非常非常大。劳驾您了,谢谢!

TOP

本帖最后由 pcl_test 于 2016-7-6 19:18 编辑

回复 4# qzwifi
  1. /*&cls
  2. @echo off
  3. set "afile=a.txt"
  4. set "bfile=b.txt"
  5. rem 指定查找每行同一字符串出现最多的次数
  6. set n=2
  7. cscript -nologo -e:jscript "%~f0"<"%afile%" %n% >"%bfile%"
  8. pause&exit
  9. */
  10. var n=WSH.Arguments(0), txt='';
  11. while(!WSH.StdIn.AtEndOfStream){
  12.     var line=WSH.StdIn.ReadLine();
  13.     var str=line.split(/\s+/);
  14.     var t=0, s={};
  15.     for(var i=0; i<str.length; i++){
  16.         s[str[i]]?s[str[i]]++:s[str[i]]=1;
  17.         if(s[str[i]]>=t)t=s[str[i]];
  18.     }
  19.     if(t==n)txt+=line+'\r\n';
  20.     s=null;
  21. }
  22. WSH.echo(txt);
复制代码
1

评分人数

TOP

  1. set "max=3"
  2. gawk "{delete a;for(max=i=1;i<=NF;i++)max=(++a[$i]>max?a[$i]:max)};max==%max%" a.txt > b.txt
复制代码
1

评分人数

    • qzwifi: OK,正是我想要的。神速!非常感谢!技术 + 1

TOP

返回列表