Board logo

标题: [文本处理] 【已解决】批处理如何将txt文本每一行的每段数字/字符串按出现的次数多少排序 [打印本页]

作者: 思想之翼    时间: 2014-10-28 10:27     标题: 【已解决】批处理如何将txt文本每一行的每段数字/字符串按出现的次数多少排序

本帖最后由 pcl_test 于 2016-7-12 16:52 编辑

txt文本有00-99的数据,其格式如下:
53 74 29...
68 65 90...
70 86 84...
08 19 98...
96 81 08...
... ...  ... ...
欲逐行按出现次数从多到少排序,出现次数相同的,则从小到大排列,未出现的数据也是从小到大排列。排序结果写入另一个txt文本。
这样的批处理如何写?
作者: DAIC    时间: 2014-10-28 10:42

请给出顶楼数据处理之后希望得到的结果
作者: 思想之翼    时间: 2014-10-28 11:55

回复 2# DAIC

感谢关注。由于数据庞大,故取一行数据为例。
比如:
待排序数据:00 01 02 00 00 02 80
排序后的数据:00 02 01 80 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
作者: apang    时间: 2014-10-28 21:59

附件排序后的数据:以一行为例.txt 与顶楼描述的“出现次数相同的,则从小到大排列”不相符
作者: 思想之翼    时间: 2014-10-28 23:09

回复 4# apang

谢谢提醒。那是在excel中进行排序的,没有想到excel数据为文本格式,排序出现了不准确的现象。
作者: apang    时间: 2014-10-28 23:38

  1. @set @n=0;//&cscript -nologo -e:jscript "%~0"<a.txt>b.txt & pause & exit
  2. while (!WScript.StdIn.AtEndOfStream) {
  3.         str = WScript.StdIn.ReadLine();
  4.         if (!/^\s*$/.test(str)) WScript.Echo(getNum(str))
  5. }
  6. function getNum(s) {
  7.         ar = [];
  8.         for (i=100; i<=199; i++) {
  9.                 s1 = (i + "").substr(1);
  10.                 ar.push(s.split(s1).length + "=" + s1);
  11.         }
  12.         ar.sort(function(x,y){return y.split("=")[0]-x.split("=")[0]});
  13.         return ar.join(" ").replace(/\d+=/g, "");
  14. }
复制代码





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