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

[文本处理] 【已解决】批处理如何批量提取多个文本内出现次数最多的数据?

“文件夹1”内有210个txt文本,分别命名为001、002...210,每个txt文本记录若干数据,欲批量提取各文本数据出现次数最多的数据,并写入“文件夹2”的001.txt 002.txt ...210.txt
比如  附件“文件夹1”内001.txt中,出现最多次数(都是35次)的数据是76  54  38,提取出来并写入“文件夹2”的001.txt
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

放在"文件夹1"内执行,自己修改下"文件夹2"的路径
  1. @echo off
  2. for %%i in (*.txt) do (
  3.     setlocal enabledelayedexpansion
  4.     for /f "delims=" %%a in (%%i) do (
  5.         for %%b in (%%a) do (
  6.             set/a #%%b+=1
  7.             if !#%%b! gtr !max! (
  8.              set/a max=!#%%b!
  9.              set "#=%%b"
  10.             ) else if !#%%b! equ !max! set "#=!#! %%b"
  11.         )
  12.     )
  13.     echo,!#!>"文件夹2\%%i"
  14.     endlocal
  15. )
复制代码
1

评分人数

初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 2# xxpinqz

谢谢,解决问题了。
如果代码不放在"文件夹1"内执行,如何添加"文件夹1"的路径?

TOP

回复 3# 思想之翼
  1. @echo off
  2. cd /d "e:\123\文件夹1"
  3. for ......
复制代码
1

评分人数

初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

本帖最后由 CrLf 于 2014-7-25 16:43 编辑

powershell 的 group-group 用在这里好像也不错
  1. $a = get-content '1.txt'
  2. $b = $a -split '\s+'|group-object|group-object count
  3. $b[0].group|select-object name
复制代码
1

评分人数

TOP

本帖最后由 思想之翼 于 2014-7-25 13:21 编辑

回复 2# xxpinqz


您的代码完美解决了“提取出现最多次数的数据”的问题,十分感谢!
现在再询问一个新问题:
如何修改代码,就可以批量将各文本的数据,按出现次数,由多到少横向排序?(相同次数的数据,或按出现顺序,或从大到小,或从小到大,随便排列)
比如  1#附件“文件夹1”内001.txt中,按出现次数由多到少横向排序,并写入“文件夹2”的001.txt
叨唠您了。

TOP

本帖最后由 xxpinqz 于 2014-7-25 15:20 编辑

回复 6# 思想之翼
  1. @echo off
  2. cd /d "e:\123\文件夹1"
  3. (for %%i in (*.txt) do (
  4.     setlocal enabledelayedexpansion
  5.     for /f "delims=" %%a in (%%i) do (
  6.         for %%b in (%%a) do (
  7.            if not defined #%%b set #%%b=100000
  8.            set/a #%%b+=1
  9.         )
  10.     )
  11.     (for /f "tokens=2" %%z in ('^(for /f "tokens=1-2 delims=#=" %%a in ^('set #'^)do @echo,%%b %%a^)^|sort /r') do set/p=%%z )>"文件夹2\%%i"
  12.     endlocal
  13. ))<nul
复制代码
1

评分人数

初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

本帖最后由 思想之翼 于 2014-7-26 01:39 编辑

回复 7# xxpinqz

您的代码解决了按出现次数排序的问题,感谢!
若要在输出的每个文本的数据后,加一个换行符 (Entet),如何修改代码?

TOP

返回列表