Board logo

标题: [文件操作] 批处理怎样将txt文本内容根据每一行指定字段/列的数字排序? [打印本页]

作者: cmdlet    时间: 2015-8-27 17:13     标题: 批处理怎样将txt文本内容根据每一行指定字段/列的数字排序?

本帖最后由 pcl_test 于 2016-11-8 22:45 编辑

45.64.21.14 1173 a248.e.akamai.net
202.175.5.103 955 a248.e.akamai.net
202.175.5.184 2189 a248.e.akamai.net
...下面还有几千条,不列举了

以上为随机输出结果,我需要将这个随机文档重新排序前面是IP 中间是延时,需要按照中间的延时数字排序(延时小的在前面)然后重新输出文本,这种格式:

202.175.5.103 955 a248.e.akamai.net
45.64.21.14 1173 a248.e.akamai.net
202.175.5.184 2189 a248.e.akamai.net
...下面还有几千条,不列举了

请问BAT如何实现
作者: aa77dd@163.com    时间: 2015-8-27 17:32

  1. @echo off & setlocal EnableDelayedExpansion
  2. if "%1"=="sub" (
  3.     for /f "tokens=1-3" %%a in (a.txt) do (
  4.         set "s=          %%b"        
  5.         echo !s:~-10! %%a %%c
  6.     )
  7.     exit
  8. ) else (
  9.     >b.txt ( for /f "tokens=1-3" %%a in ('cmd /c %0 sub ^| sort') do echo %%b %%a %%c)
  10. )
  11. start b.txt
  12. pause
复制代码

作者: pcl_test    时间: 2015-8-27 18:10

本帖最后由 pcl_test 于 2016-11-8 23:08 编辑

用Excel亦可快捷排序

第三方 gnu sort
  1. ::先下载http://batch-cn.qiniudn.com/tool/2.1/sort.exe
  2. @sort -n -k 2 "1.txt">"2.txt"
复制代码
  1. rem win7及以上系统运行
  2. powershell -c "gc '文本.txt'|sort {1*($_ -split '\s+')[1]}"
  3. pause
复制代码

作者: cmdlet    时间: 2015-8-27 21:55

回复 2# aa77dd@163.com
膜拜 ,多谢大神,能用!但是是这样的,能去掉上面的路径么
D:\Program Files (x86)\psiphon3\checkakamai>echo 203.78.32.86 505 a248.e.akamai.net
203.78.32.86 505 a248.e.akamai.net

D:\Program Files (x86)\psiphon3\checkakamai>echo 203.78.32.104 507 a248.e.akamai.net
203.78.32.104 507 a248.e.akamai.net

D:\Program Files (x86)\psiphon3\checkakamai>echo 203.78.32.70 509 a248.e.akamai.net
203.78.32.70 509 a248.e.akamai.net
作者: cmdlet    时间: 2015-8-27 21:59

回复 3# pcl_test


    谢谢大神 我试试
作者: cmdlet    时间: 2015-8-27 22:10

回复 3# pcl_test


    太牛了,能用,学习了!!
作者: terse    时间: 2015-8-27 22:55

  1. @if(0)==(0) echo off
  2. CScript -NoLogo -E:JScript %0 <a.txt >b.txt
  3. pause&goto:eof
  4. @end
  5. var arr = [];
  6. while (!WScript.StdIn.AtEndOfStream){
  7.    arr.push(WScript.StdIn.Readline().replace(/ +/," ").split(" "));
  8. }
  9. arr.sort(function(a, b){ return a[1] - b[1] });
  10. for (var i = 0, len = arr.length; i < len; i++) {
  11.     WSH.Echo(arr[i].join(" "))
  12. }
复制代码





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