Board logo

标题: [文本处理] 批处理如何将多个txt文本按每一行前面/行首/开头的数字大小排序? [打印本页]

作者: 小丑丶鱼心有愧    时间: 2016-7-11 20:27     标题: 批处理如何将多个txt文本按每一行前面/行首/开头的数字大小排序?

本帖最后由 pcl_test 于 2017-6-7 07:20 编辑

有十几个数据庞大的txt文件,里面有很多行数字,全部复制到word排列太麻烦了,有什么bat代码可以直接在txt文件内执行的吗?c++那些不会用,还是bat实在,虽然慢些。
例如
4561248542——小明——42156元
124321345—— 小芳——1243元
4545642——小红——421元
6321354——小绿——580元
423165——小蓝——50元
78545631——小田——1000元
4513——小鸡——7元
.
.
.
.
.
大致是这样,数字后面有几个符号和中文的,数字最小4位,最大11位,如何从小到大排列?网上查的有些都在前面加了个符号,符号虽然可以替换,但多个txt批处理都替换就麻烦了,众坛友帮帮忙,感激...
作者: 小丑丶鱼心有愧    时间: 2016-7-11 22:37

斑竹你好,论坛里的每一个关键字的帖子我都尝试过了,但都只是首数字是按大小,第二位就不是了。
我需要的是每一行前面十位数字,是按大小排列,之后的中文跟着前面的数字移动

举个栗子



123赤
51橙
2347黄
97绿
3256789青
985蓝
8紫

试过的帖子处理后的是

123赤
2347黄
3256789青
51橙
8紫
97绿
985蓝

我想要的是
8紫
51橙
97绿
123赤
985蓝
2347黄
3256789青

突然想到一个复合标题的词,递增。。。嗯,是。。。就这个,交流少不懂表达,斑竹莫怪...
作者: pcl_test    时间: 2016-7-12 13:42

本帖最后由 pcl_test 于 2016-7-12 15:41 编辑

第三方
http://batch-cn.qiniudn.com/tool/7.6/sort.exe
  1. @echo off
  2. for /f "delims=" %%a in ('dir /a-d/b *.txt') do sort -n %%a>New_%%a
  3. pause
复制代码

作者: pcl_test    时间: 2016-7-12 14:28

  1. //&cls&dir /a-d/b *.txt|cscript -nologo -e:jscript "%~f0"&pause&exit
  2. var fso = new ActiveXObject('Scripting.Filesystemobject');
  3. function SortNumber(file){
  4.     var f = fso.OpenTextFile(file, 1);
  5.     try{
  6.         var txt = f.ReadAll().split(/\r\n/).sort(
  7.             function(a, b){return Number(a.replace(/^\s*(\d+).*/, '$1'))-Number(b.replace(/^\s*(\d+).*/, '$1'))}
  8.         ).join('\r\n');
  9.         f.Close();
  10.         fso.OpenTextFile(file, 2).Write(txt);
  11.     }catch(e){}
  12. }
  13. while(!WSH.StdIn.AtEndOfStream)SortNumber(WSH.StdIn.ReadLine());
  14. WSH.echo('Done');
复制代码

作者: GNU    时间: 2016-7-12 17:51

不知道你为啥要用word排序,导入到Excel里面排序不是挺方便的嘛。
作者: 小丑丶鱼心有愧    时间: 2016-7-12 19:23

回复 3# pcl_test


    可以了,就是一定要依赖第三方的exe才行对吧?bat本身没有递进排序功能...
作者: 小丑丶鱼心有愧    时间: 2016-7-12 19:24

回复 5# GNU


    额,是excel,手滑打错了,谢谢指正,数据太庞大了,导入excel直接卡死...
作者: gawk    时间: 2016-7-12 19:31

回复 6# 小丑丶鱼心有愧


    Windows系统有自带的sort命令,但是它不支持那么多的排序规则。第三方的sort比较强大。
作者: 小丑丶鱼心有愧    时间: 2016-7-12 19:33

回复 4# pcl_test


    斑竹,真是太感谢你了,完美解决。三楼的配合三方是生成新的处理后的new文件,四楼的是在文件内处理...


             书到用时方恨少,太感谢了...
作者: gawk    时间: 2016-7-12 19:33

回复 7# 小丑丶鱼心有愧


Excel 2013 最大支持一百多万行,你的单个txt文件大概多少行?
特别大的文件sort也会比较占内存。
作者: 小丑丶鱼心有愧    时间: 2016-7-12 19:35

回复 8# gawk


    sort是怎么编程的呢,有无书籍之类的?是属于java还是c++?...
作者: gawk    时间: 2016-7-12 21:11

回复 11# 小丑丶鱼心有愧


    源代码是C语言
作者: WHY    时间: 2016-7-14 22:38

PowerShell 可以这样,速度不咋地
  1. get-Content a.txt | sort @{e={1*($_ -split '\D')[0]}}
复制代码





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