Board logo

标题: [文本处理] 【已解决】批处理如何实现多文本统计总个数并排序? [打印本页]

作者: 思想之翼    时间: 2013-5-18 15:02     标题: 【已解决】批处理如何实现多文本统计总个数并排序?

本帖最后由 思想之翼 于 2013-5-19 23:06 编辑

有若干txt文本,每个文本数据格式为:数据+个数,比如下面1个文本数据是:
1 23
9 23
0 22
3 22
4 22
5 22
8 22
6 22
2 21
7 20
其表示数据1有23个,数据9有23个,数据0有22个......
现在欲将若干txt文本中数据汇总,统计各个数据的总个数,并按总个数从多到少进行排序,结果写入新建的txt文本,数据格式为:
7  102
5  99
4  87
...
作者: xxpinqz    时间: 2013-5-18 16:12

本帖最后由 xxpinqz 于 2013-5-18 16:28 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (*.txt) do (
  3.   for /f "tokens=1,2 delims= " %%i in (%%a) do (
  4.     set /a #%%i+=%%j
  5.   )
  6. )
  7. for /f "tokens=1,2 delims==#" %%a in ('set #') do (
  8.    set "num=//////////%%b"
  9.    set "$!num:~-10!=%%a"
  10. )
  11. (for /f "tokens=1,2 delims==$/" %%a in ('set $^|sort /+1000') do echo %%b %%a)>ok.txt
  12. start ok.txt
复制代码

作者: 思想之翼    时间: 2013-5-18 17:30

回复 2# xxpinqz

谢谢帮助,代码运行完美正确。
作者: 思想之翼    时间: 2013-6-17 11:31

回复 2# xxpinqz

您写的代码运用中发现问题:
比如2个txt文本,数据均为
1 23
9 23
0 22
3 22
4 22
5 22
8 22
6 22
2 21
7 20,
统计总个数,应该为
1 46
9 46
0 44
3 44
4 44
5 44
8 44
6 44
2 42
7 40
但是,运用您的代码,却得不到这样的结果。问题出在哪?恳望再次得到您的帮助!
作者: xxpinqz    时间: 2013-6-17 12:17

  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (*.txt) do (
  3.   for /f "tokens=1,2 delims= " %%i in (%%a) do (
  4.     set /a #%%i+=%%j
  5.   )
  6. )
  7. for /f "tokens=1,2 delims==#" %%a in ('set #') do (
  8.    set /a r=!random!+10000
  9.    set "num=/////%%b/!r!"
  10.    set "$!num:~-12!=%%a"
  11. )
  12. (for /f "tokens=1,3 delims=$=/" %%a in ('set $^|sort /+1000') do echo %%b %%a)>ok.txt
  13. start ok.txt
复制代码
是值相同时出错了,加个随机数。




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