中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-16 20:45
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]DOS下如何进行排序 查看 869 回复 13
楼 主 [已结]DOS下如何进行排序 发表于 2008-10-13 12:23 ·  中国 广东 广州 天河区 电信
初级用户
★★
积分 71
发帖 59
注册 2007-12-27 17:53
UID 106966
性别 男
状态 离线
如我有一个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 ]
2 发表于 2008-10-13 21:45 ·  中国 广西 南宁 电信
初级用户
积分 115
发帖 45
注册 2007-03-03 10:09
UID 80655
性别 男
状态 离线
有点难度,我动用了两个重量级工具sed和gawk才勉强完成第一项任务──单行排序。
sed "s/ /\n/g" a.txt | sort | gawk "{printf(\"%%s \",$0)}"
3 Re 2楼 发表于 2008-10-13 21:55 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
提供一个排序的方法:
@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
4 发表于 2008-10-13 22:03 ·  中国 广西 南宁 电信
初级用户
积分 115
发帖 45
注册 2007-03-03 10:09
UID 80655
性别 男
状态 离线
楼上排序结果是
02
03
05
06
07
10
但楼主要求是
02 03 05 06 07 10
5 Re 4楼 发表于 2008-10-13 22:07 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
提供一个合并行的方法:
@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
6 发表于 2008-10-13 22:26 ·  中国 广西 南宁 电信
初级用户
积分 115
发帖 45
注册 2007-03-03 10:09
UID 80655
性别 男
状态 离线
哈,又学了几招,不愧是版主,坚持不用任何工具。
不过,要完成楼主的第二项任务应该借助工具了吧。
7 Re 6楼 发表于 2008-10-13 23:33 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
第二个应该比第一个简单吧,你先试着写一下?
8 发表于 2008-10-14 01:40 ·  中国 云南 昆明 电信
中级用户
★★
积分 220
发帖 99
注册 2008-06-26 15:12
UID 120818
性别 男
状态 离线
HAT大哥.
set .是什么意思啊?
9 发表于 2008-10-14 02:01 ·  中国 广东 广州 白云区 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线

@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!
致精致简!
10 Re 8楼 发表于 2008-10-14 09:33 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
set /?
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'
11 发表于 2008-10-14 09:38 ·  中国 广东 广州 天河区 电信
初级用户
★★
积分 71
发帖 59
注册 2007-12-27 17:53
UID 106966
性别 男
状态 离线
哇..都是牛人...又学了N多东东..
谢谢大家了....非常感谢..
12 发表于 2008-10-14 10:23 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
这样效率更高些
@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!
13 发表于 2008-10-14 10:24 ·  中国 广东 广州 天河区 电信
初级用户
★★
积分 71
发帖 59
注册 2007-12-27 17:53
UID 106966
性别 男
状态 离线
好的..谢谢..hat版主..
14 发表于 2009-01-15 01:06 ·  中国 江苏 南京 电信
初级用户
★★
积分 62
发帖 62
注册 2007-07-14 14:39
UID 93962
性别 男
状态 离线
答案有误,应该在txt文件里读取数字,再自动操作,而非在批处理中手工录入
论坛跳转: