[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何将txt文本里的内容根据每一行行首的字符按字母、数字到中文的先后次序排序

本帖最后由 pcl_test 于 2016-11-19 23:05 编辑

最基本的我会,但现在的问题就是第一行都有一个“/”

如文本里都是这样的路径:

/manage/AdminLogin.aspx
/tmp
/WebEditor/db/ewebeditor.mdb
/wenzhang
/Admin_Login8.php
/Admin_Label.php
/err.php
/logon.php
/open.php.bak
/boss/admin.php
/editor/admin_login.php

/新建文本.txt
/122.php
/2a21.asp
/数据.txt


我想让他们按照 / 后面的字母按字母排序,如果有数字,到排到最后,有中文的话,也排到最后

【因为行数超过6万行,无法用excel,所以想到用批处理】
【大概有19万行路径】

回复 1# Rasm


   
SORT [/R] [/+n] [/M kilobytes] [/L locale] [/REC recordbytes]
[[drive1:][path1]filename1] [/T [drive2:][path2]]
[/O [drive3:][path3]filename3]
/+n 指定开始每个比较的字符号码 n。/+3 说明每个比较应从每行的第三个字符开始。少于 n 个字符的行排在其他行之前。按默认值,从每行的第一个字符开始比较。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

Excel2007可以超过6万行的吧

TOP

dir  里面不是自带按字母排序功能的吗?
干嘛等搜索出文件名后才想到排序呢?

TOP

回复 2# cjiabing


sort能把数字排到后面?你给个命令大家学习下?

TOP

回复 4# BAT1


这个不像是dir出来的吧

TOP

回复 6# find


    出个脑残的主意先映射一个“虚拟盘”,然后把“空目录”恢复到这个盘里面,再用 dir 加 按文件名排序的参数,重新提出目录名。

TOP

回复 7# BAT1


十几万个啊,效率无法接受。

TOP

本帖最后由 BAT1 于 2012-3-16 22:03 编辑

回复 8# find


    如果用FOR进行循环比较的话,估计,效率会成几何递减,那样的话,效率更难接受吧。

看到楼主想到过用EXCEL,如果用FOR 只按字母、数字、中文字符进行分离,把大文件按一定的规则,分割成三个小一点的文件(如字母开头的放一个文件,数字开头的放一个文件,中文开头放一个文件,……)然后再用EXCEL进行排序,情况会不会有好转?
如果某个字母开头的特别多,再针对某个字母再次分离出来(比如C特别多,那就把大文件分开来一个有C,一个无C)用EXCEL单独排序。

TOP

回复 9# BAT1
  1. @echo off
  2. findstr "^/[0-9]" a.txt >num.txt
  3. findstr "^/[a-zA-Z]" a.txt >en.txt
  4. sort /+1 en.txt >result.txt
  5. findstr "^/[0-9]" num.txt >>result.txt
  6. findstr /v "^/[0-9a-zA-Z]" a.txt >>result.txt
复制代码

TOP

回复 10# find


    先别急着写代码,先想思路,一条好的思路,有时候能顶十多条代码。
1

评分人数

    • Rasm: 我赞同你的观点技术 + 1

TOP

回复 11# BAT1


3楼回帖之前代码已经写好了,你有更高效的就拿出来学习下。

TOP

回复 5# find


    菜鸟,如果你没试过就不要乱喊喳喳!
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 13# cjiabing


求高人指点高效代码

TOP

回复 14# find

材料:
   
  1. /editor/admin_login.php
  2. /新建文本.txt
  3. /logon.php
  4. /open.php.bak
  5. /boss/admin.php
  6. /2a21.asp
  7. /tmp
  8. /WebEditor/db/ewebeditor.mdb
  9. /wenzhang
  10. /数据.txt
  11. /manage/AdminLogin.aspx
  12. /122.php
  13. /Admin_Login8.php
  14. /Admin_Label.php
  15. /err.php
复制代码

代码:
  1. @echo off&::把文本文件拖到图标上释放即可 . . .
  2. findstr /b /v "^/[0-9]" %1|sort&findstr /b "^/[0-9]" %1|sort
  3. pause
复制代码

        sort 本身的排序方式就是“先数字后字母再后中文,以列定行。”。虽然sort有一个倒序功能,sort /r,但按楼主的要求明显不必使用R参数。
        可以参照以下例子:
  1. C:\Documents and Settings\甲兵>sort E:\Batch\文本编辑\倒序\test.txt
  2. /122.php
  3. /2a21.asp
  4. /admin_Label.php
  5. /Admin_Login8.php
  6. /editor/admin_login.php
  7. /err.php
  8. /tmp
  9. /WebEditor/db/ewebeditor.mdb
  10. /wenzhang
  11. /数据.txt
  12. /新建文本.txt
复制代码

        恰好每一行文字的开头都有“/”这一成不变的符号,因此,排序的时候不必考虑它,也不必考虑使用sort /+n,sort会自动从第二列——每行的第二个字符开始排序。
        以上代码第一个findstr和sort是获得非数字字符,第二个是单独获得数字字符。——如果按照通常顺序,一个sort %1或sort /r %1就可以了。
        题外话,似乎盯上本人了,本人在哪里发言会员find就在哪里质疑本人,精神实在可嘉!本人非计算机专业,玩批也是业余爱好,对计算机和批处理的认识难免存在不足,谢谢find能够及时指出,本人当虚心接受。但假如find的质疑缺乏足够的依据与真诚,本人也不会斤斤计较,但再假如find不依不饶的纠缠不清,那就是不尊重兄弟了,故而本人有时候也会莫名火起,恳请谅解。每个人都有不足,也有优点,希望能向你学习!
1

评分人数

    • Rasm: 多谢交流技术 + 1
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

返回列表