中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [已结]DOS下如何进行排序 上一主题 | 下一主题
wjcing
初级用户





积分 71
发帖 59
注册 2007-12-27
状态 离线
『楼 主』:  [已结]DOS下如何进行排序

如我有一个txt文件,内容是一行数字,如:10 02 03 06 05 07
我想把他按从小到大的顺序排序成:02 03 05 06 07 10输出到1.txt文件中.并把1到10中不包含上面那行的:01 04 08 09输出为2.txt.
请问如何做..谢谢..

[ Last edited by HAT on 2008-10-14 at 10:24 ]

2008-10-13 12:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ceii
初级用户





积分 115
发帖 45
注册 2007-3-3
状态 离线
『第 2 楼』:  

有点难度,我动用了两个重量级工具sed和gawk才勉强完成第一项任务──单行排序。
sed "s/ /\n/g" a.txt | sort | gawk "{printf(\"%%s \",$0)}"


2008-10-13 21:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 3 楼』:  Re 2楼

提供一个排序的方法:
@echo off
set str=10 02 03 06 05 07
for %%a in (%str%) do set .%%a=%%a
for /f "tokens=2 delims==" %%a in ('set .') do echo %%a




2008-10-13 21:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ceii
初级用户





积分 115
发帖 45
注册 2007-3-3
状态 离线
『第 4 楼』:  

楼上排序结果是
02
03
05
06
07
10
但楼主要求是
02 03 05 06 07 10

2008-10-13 22:03
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 5 楼』:  Re 4楼

提供一个合并行的方法:
@echo off
set str=10 02 03 06 05 07
for %%a in (%str%) do set .%%a=%%a
for /f "tokens=2 delims==" %%a in ('set .') do set /p =%%a <nul




2008-10-13 22:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ceii
初级用户





积分 115
发帖 45
注册 2007-3-3
状态 离线
『第 6 楼』:  

哈,又学了几招,不愧是版主,坚持不用任何工具。
不过,要完成楼主的第二项任务应该借助工具了吧。

2008-10-13 22:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 7 楼』:  Re 6楼

第二个应该比第一个简单吧,你先试着写一下?



2008-10-13 23:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
23112656
中级用户





积分 220
发帖 99
注册 2008-6-26
状态 离线
『第 8 楼』:  

HAT大哥.
set .是什么意思啊?

2008-10-14 01:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 9 楼』:  


@echo off&setlocal enabledelayedexpansion
set str=10 02 03 06 05 07
for %%a in (%str%) do set .%%a=%%a
for /l %%a in (1 1 10) do (
  set "str=00%%a"
  set "str=!str:~-2!"
  if defined .!str! (set num1=!num1! !str!) else set "num2=!num2! !str!"
)
>>1.txt echo !num1:~1!
>>2.txt echo !num2:~1!




致精致简!
2008-10-14 02:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 10 楼』:  Re 8楼

set /?

  Quote:
SET command invoked with just a variable name, no equal sign or value
will display the value of all variables whose prefix matches the name
given to the SET command.  For example:

    SET P

would display all variables that begin with the letter 'P'





2008-10-14 09:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wjcing
初级用户





积分 71
发帖 59
注册 2007-12-27
状态 离线
『第 11 楼』:  

哇..都是牛人...又学了N多东东..
谢谢大家了....非常感谢..

2008-10-14 09:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 12 楼』:  

这样效率更高些
@echo off
setlocal enabledelayedexpansion
set str=10 02 03 06 05 07
for %%a in (%str%) do set .%%a=%%a
for %%a in (01 02 03 04 05 06 07 08 09 10) do (
  if defined .%%a (
    set num1=!num1! %%a
  ) else (
    set num2=!num2! %%a
  )
)
>>1.txt echo !num1:~1!
>>2.txt echo !num2:~1!




2008-10-14 10:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wjcing
初级用户





积分 71
发帖 59
注册 2007-12-27
状态 离线
『第 13 楼』:  

好的..谢谢..hat版主..

2008-10-14 10:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pkto
初级用户





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

答案有误,应该在txt文件里读取数字,再自动操作,而非在批处理中手工录入

2009-1-15 01:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: