楼 主
[已结]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 性别 男
状态 离线
第 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 性别 男
状态 离线
第 14 楼
发表于 2009-01-15 01:06 · 中国 江苏 南京 电信
初级用户
★★
积分 62 发帖 62 注册 2007-07-14 14:39 UID 93962 性别 男
状态 离线
答案有误,应该在txt文件里读取数字,再自动操作,而非在批处理中手工录入
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正