|
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 /?
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 |
|