中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]用sort能否实现文件数值按大小排序
作者:
标题: [已解决]用sort能否实现文件数值按大小排序 上一主题 | 下一主题
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『楼 主』:  [已解决]用sort能否实现文件数值按大小排序

RT
假设文件test.txt中为纯数字的数据,有如下数字
25
1
9
385
87
195876
如果用sort test.txt命令排序只能得到如下结果
1
195876
25
385
87
9
也就是说sort进行排序时是先按首位字符排序,那么如果按照平时习惯是按数值大小排序应该如何处理,也就是结果应该如下
1
9
25
87
385
195876


[ Last edited by suntb on 2007-5-18 at 10:05 AM ]

2007-5-17 20:12
查看资料  发短消息 网志   编辑帖子
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『第 2 楼』:  

没有人帮忙,查看论坛中的帖子,好象用sort无法实现

[ Last edited by suntb on 2007-5-18 at 11:11 AM ]

2007-5-17 20:48
查看资料  发短消息 网志   编辑帖子
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 3 楼』:  

我也在想这个问题,也没有答案

2007-5-22 21:02
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 4 楼』:  

多搜索一下,记得以前有过类似的讨论的。

2007-5-23 00:59
查看资料  发送邮件  发短消息 网志   编辑帖子
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 5 楼』:  

试试以下代码:
::code by youxi01@cn-dos.net
::使用格式:命令行中,输入:
::[本文件名] [待处理数字文本文件名]
@echo off
setlocal enabledelayedexpansion

if "%2"=="" (
    for /f "tokens=2 delims=#" %%i in ('"%~0" %1 OK^|sort') do echo %%i
) else (
    for /f %%i in (%1) do (
       call :CheckNum %%i Res
       echo !Res!#%%i)
    goto :eof)

pause>nul

:CheckNum num Res
   set/a Res=0
   for /l %%i in (0 1 1000) do (
      set "var=%~1"
      set tmp=!var:~%%i,1!
      if "!tmp!"=="" goto :eof
      set/a Res+=1)
使用格式:[本文件名] [待处理数字文本文件名]
示例,某名为 “test.txt” 文件中有数字如下:
25
1
9
385
87
195876
在CMD 下测试结果如下:
F:\>paixu.bat test.txt
1
9
25
87
385
195876
不过郁闷的是,在测试时,我将这个P处理文件名改成了sort.bat,然后问题就来了,害我重启了两次,后来终于明白.....

   此帖被 +8 点积分        点击查看详情   
评分人:【 plp626 分数: +8  时间:2008-3-22 05:51


2007-5-23 01:19
查看资料  发送邮件  发短消息 网志   编辑帖子
MLQX
初级用户





积分 28
发帖 15
注册 2008-4-28
状态 离线
『第 6 楼』:  请高手支一声



  Quote:
::code by youxi01@cn-dos.net
::使用格式:命令行中,输入:
::[本文件名] [待处理数字文本文件名]
@echo off
setlocal enabledelayedexpansion

if "%2"=="" (
    for /f "tokens=2 delims=#" %%i in ('"%~0" %1 OK^|sort') do echo %%i
) else (
    for /f %%i in (%1) do (
       call :CheckNum %%i Res
       echo !Res!#%%i)
    goto :eof)

pause>nul

:CheckNum num Res
   set/a Res=0
   for /l %%i in (0 1 1000) do (
      set "var=%~1"
      set tmp=!var:~%%i,1!
      if "!tmp!"=="" goto :eof
      set/a Res+=1

请问:
for /f "tokens=2 delims=#" %%i in ('"%~0" %1 OK^|sort') do echo %%i
)
其中为什么要加OK俩字母???????

2008-5-3 11:13
查看资料  发送邮件  发短消息 网志   编辑帖子
pkto
初级用户





积分 62
发帖 62
注册 2007-7-14
状态 离线
『第 7 楼』:  

呵呵,如何把这个排序结果输入到一个新的文本文件里呢?请教一下呵

2008-12-27 13:51
查看资料  发短消息 网志   编辑帖子

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: