Board logo

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

作者: 思想之翼    时间: 2014-7-23 14:55     标题: 【已解决】批处理如何批量提取多个文本内出现次数最多的数据?

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

放在"文件夹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. )
复制代码

作者: 思想之翼    时间: 2014-7-23 16:42

回复 2# xxpinqz

谢谢,解决问题了。
如果代码不放在"文件夹1"内执行,如何添加"文件夹1"的路径?
作者: xxpinqz    时间: 2014-7-23 19:57

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

作者: CrLf    时间: 2014-7-23 20:36

本帖最后由 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
复制代码

作者: 思想之翼    时间: 2014-7-25 12:59

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

回复 2# xxpinqz


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

本帖最后由 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
复制代码

作者: 思想之翼    时间: 2014-7-26 01:33

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

回复 7# xxpinqz

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




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2