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

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

[复制链接]
发表于 2014-7-23 14:55:29 | 显示全部楼层 |阅读模式
“文件夹1”内有210个txt文本,分别命名为001、002...210,每个txt文本记录若干数据,欲批量提取各文本数据出现次数最多的数据,并写入“文件夹2”的001.txt 002.txt ...210.txt
比如  附件“文件夹1”内001.txt中,出现最多次数(都是35次)的数据是76  54  38,提取出来并写入“文件夹2”的001.txt

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2014-7-23 16:28:15 | 显示全部楼层
放在"文件夹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技术 +1 收起 理由
思想之翼 + 1 完美解决问题

查看全部评分

 楼主| 发表于 2014-7-23 16:42:49 | 显示全部楼层
回复 2# xxpinqz

谢谢,解决问题了。
如果代码不放在"文件夹1"内执行,如何添加"文件夹1"的路径?
发表于 2014-7-23 19:57:35 | 显示全部楼层
回复 3# 思想之翼
  1. @echo off
  2. cd /d "e:\123\文件夹1"
  3. for ......
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢

查看全部评分

发表于 2014-7-23 20:36:56 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
思想之翼 + 1 感谢

查看全部评分

 楼主| 发表于 2014-7-25 12:59:10 | 显示全部楼层
本帖最后由 思想之翼 于 2014-7-25 13:21 编辑

回复 2# xxpinqz


您的代码完美解决了“提取出现最多次数的数据”的问题,十分感谢!
现在再询问一个新问题:
如何修改代码,就可以批量将各文本的数据,按出现次数,由多到少横向排序?(相同次数的数据,或按出现顺序,或从大到小,或从小到大,随便排列)
比如  1#附件“文件夹1”内001.txt中,按出现次数由多到少横向排序,并写入“文件夹2”的001.txt
叨唠您了。
发表于 2014-7-25 15:15:35 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
思想之翼 + 1 感谢帮助

查看全部评分

 楼主| 发表于 2014-7-26 01:33:43 | 显示全部楼层
本帖最后由 思想之翼 于 2014-7-26 01:39 编辑

回复 7# xxpinqz

您的代码解决了按出现次数排序的问题,感谢!
若要在输出的每个文本的数据后,加一个换行符 (Entet),如何修改代码?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 20:54 , Processed in 0.029524 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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