标题: [文本处理] 【已解决】批处理如何批量提取多个文本内出现次数最多的数据? [打印本页]
作者: 思想之翼 时间: 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"的路径- @echo off
- for %%i in (*.txt) do (
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in (%%i) do (
- for %%b in (%%a) do (
- set/a #%%b+=1
- if !#%%b! gtr !max! (
- set/a max=!#%%b!
- set "#=%%b"
- ) else if !#%%b! equ !max! set "#=!#! %%b"
- )
- )
- echo,!#!>"文件夹2\%%i"
- endlocal
- )
复制代码
作者: 思想之翼 时间: 2014-7-23 16:42
回复 2# xxpinqz
谢谢,解决问题了。
如果代码不放在"文件夹1"内执行,如何添加"文件夹1"的路径?
作者: xxpinqz 时间: 2014-7-23 19:57
回复 3# 思想之翼 - @echo off
- cd /d "e:\123\文件夹1"
- for ......
复制代码
作者: CrLf 时间: 2014-7-23 20:36
本帖最后由 CrLf 于 2014-7-25 16:43 编辑
powershell 的 group-group 用在这里好像也不错- $a = get-content '1.txt'
- $b = $a -split '\s+'|group-object|group-object count
- $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# 思想之翼 - @echo off
- cd /d "e:\123\文件夹1"
- (for %%i in (*.txt) do (
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in (%%i) do (
- for %%b in (%%a) do (
- if not defined #%%b set #%%b=100000
- set/a #%%b+=1
- )
- )
- (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"
- endlocal
- ))<nul
复制代码
作者: 思想之翼 时间: 2014-7-26 01:33
本帖最后由 思想之翼 于 2014-7-26 01:39 编辑
回复 7# xxpinqz
您的代码解决了按出现次数排序的问题,感谢!
若要在输出的每个文本的数据后,加一个换行符 (Entet),如何修改代码?
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |