Board logo

标题: [文本处理] 【已解决】批处理怎样按文本每一行开头的数字序号大小排序? [打印本页]

作者: pan528    时间: 2013-7-12 10:37     标题: 【已解决】批处理怎样按文本每一行开头的数字序号大小排序?

本帖最后由 pcl_test 于 2016-11-3 20:25 编辑

有一文本,每行前二段是数字,如何按数字序号排序?如下:
原文本:
  1. 1_102742_全国人民代表大会常务委员会关于中国银行业监督管理委员会履行原由中国人民银行履行的监督管理职责的决定
  2. 1_100_全国人民代表大会常务委员会关于海南省出席第七届全国人民代表大会代表团组成的决定
  3. 1_102_中华人民共和国传染病防治法
  4. 1_103_中华人民共和国行政诉讼法
  5. 2_12310_中共中央办公厅、国务院办公厅关于在国内公务活动中严禁用**宴请和有关工作餐的规定
  6. 2_12167_国务院关于发布《中华人民共和国一九八七年国库券条例》的通知
  7. 2_122765_全民所有制工业企业承包经营责任制暂行条例(修订)
  8. 3_1924_最高人民法院关于典当房屋回赎期限计算问题的批复
  9. 4_11571_**行政机关行政赔偿、刑事赔偿办法
  10. 4_11590600_大型运动会审计工作暂行规定
  11. 1_10_全国人民代表大会常务委员会批准国务院关于华侨捐资兴办学校办法的决议
  12. 1_1029721234_中华人民共和国澳门特别行政区第一届**推选委员会委员守则
  13. 1_1_关于中华人民共和国国都、纪年、国歌、国旗的决议
  14. 1_101_中华人民共和国进出口商品检验法
  15. 4_115887_火炬计划标志使用管理办法
  16. 2_12180_国务院关于违反财政法规处罚的暂行规定
  17. 2_12226_国家土地开发建设基金回收管理试行办法
  18. 2_1253070_中华人民共和国进出口关税条例
  19. 3_1926_最高人民法院关于产权人双方在“**”期间互换房屋各自行使权利多年后能否翻悔的批复
  20. 3_192250_最高人民**关于印发《关于进一步加强检察机关办案安全防范工作的意见》的通知
  21. 3_1925_最高人民法院关于韩荷敏等人与宁桂兰等人房屋继承案的批复
  22. 3_1923_最高人民法院关于房屋典当回赎中几个有关问题的批复
  23. 4_11596_合伙律师事务所管理办法
  24. 4_11595_律师资格考核授予办法
  25. 4_11563_提存公证规则
复制代码
排序后的效果:
  1. 1_1_关于中华人民共和国国都、纪年、国歌、国旗的决议
  2. 1_10_全国人民代表大会常务委员会批准国务院关于华侨捐资兴办学校办法的决议
  3. 1_100_全国人民代表大会常务委员会关于海南省出席第七届全国人民代表大会代表团组成的决定
  4. 1_101_中华人民共和国进出口商品检验法
  5. 1_102_中华人民共和国传染病防治法
  6. 1_103_中华人民共和国行政诉讼法
  7. 1_102742_全国人民代表大会常务委员会关于中国银行业监督管理委员会履行原由中国人民银行履行的监督管理职责的决定
  8. 1_1029721234_中华人民共和国澳门特别行政区第一届**推选委员会委员守则
  9. 2_12167_国务院关于发布《中华人民共和国一九八七年国库券条例》的通知
  10. 2_12180_国务院关于违反财政法规处罚的暂行规定
  11. 2_12226_国家土地开发建设基金回收管理试行办法
  12. 2_12310_中共中央办公厅、国务院办公厅关于在国内公务活动中严禁用**宴请和有关工作餐的规定
  13. 2_122765_全民所有制工业企业承包经营责任制暂行条例(修订)
  14. 2_1253070_中华人民共和国进出口关税条例
  15. 3_1923_最高人民法院关于房屋典当回赎中几个有关问题的批复
  16. 3_1924_最高人民法院关于典当房屋回赎期限计算问题的批复
  17. 3_1925_最高人民法院关于韩荷敏等人与宁桂兰等人房屋继承案的批复
  18. 3_1926_最高人民法院关于产权人双方在“**”期间互换房屋各自行使权利多年后能否翻悔的批复
  19. 3_192250_最高人民**关于印发《关于进一步加强检察机关办案安全防范工作的意见》的通知
  20. 4_11563_提存公证规则
  21. 4_11571_**行政机关行政赔偿、刑事赔偿办法
  22. 4_11595_律师资格考核授予办法
  23. 4_11596_合伙律师事务所管理办法
  24. 4_115887_火炬计划标志使用管理办法
  25. 4_11590600_大型运动会审计工作暂行规定
复制代码

作者: PowerShell    时间: 2013-7-12 12:47

powershell代码,
Get-Content a.txt | sort-object
其他的也都行吧。
作者: terse    时间: 2013-7-12 12:49

  1. @echo off&setlocal enabledelayedexpansion
  2. %1(for /f "tokens=1* delims=_" %%i in ('%~s0 : ^|sort') do echo %%j)>2.txt&exit
  3. for /l %%a in (1 1 99) do set "k=!k! "
  4. for /f "tokens=1-2* delims=_" %%i in (1.txt) do (
  5. set "str1=!k!%%i"
  6. set "str2=!k!%%j"
  7.         echo !str1:~-99!!str2:~-99!_%%i_%%j_%%k
  8. )
复制代码

作者: DAIC    时间: 2013-7-12 14:13

回复 2# PowerShell


学习了。我自己试验了一下,在顶楼数据最后加一行:
10_1_批处理

第一个下划线前面出现两位数字,排序会出错。10_x跑到2_x前面去了。
这种情况怎么解决呢?
作者: CrLf    时间: 2013-7-12 15:28

如果原来的标号是事先对齐的,可以直接这样:
  1. @sort a.txt>b.txt
复制代码
否则需要先补位个:
  1. @(gawk -F"_" "{printf(\"% 3d_% 10d_%s\n\" ,$1,$2,$3)}"|sort|sed "s/\s*\([0-9]*_\)/\1/g")<a.txt>b.txt
复制代码

作者: pan528    时间: 2013-7-13 22:26

回复 3# terse

谢谢!通过了测试。能解释一下“%~s0 : ”的含义吗?
作者: pan528    时间: 2013-7-14 17:05

回复 3# terse

请教:这个代码排序后,最后会出现一行“ECHO 处于关闭状态。”,有办法去除吗?
作者: terse    时间: 2013-7-14 17:25

回复 7# pan528
紧跟在echo 后面写上";"试  这样 echo;.............
作者: pan528    时间: 2013-7-15 12:32

回复 8# terse

谢谢,问题排除了!但不理解原因,能指教吗?
作者: CrLf    时间: 2013-7-15 14:41

gnu sort 真强大:
  1. @sort -n a.txt>b.txt
复制代码





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