Board logo

标题: [已结]DOS下如何进行排序 [打印本页]

作者: wjcing     时间: 2008-10-13 12:23    标题: [已结]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 ]

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

作者: HAT     时间: 2008-10-13 21:55    标题: 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

作者: ceii     时间: 2008-10-13 22:03
楼上排序结果是 02 03 05 06 07 10 但楼主要求是 02 03 05 06 07 10

作者: HAT     时间: 2008-10-13 22:07    标题: 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

作者: ceii     时间: 2008-10-13 22:26
哈,又学了几招,不愧是版主,坚持不用任何工具。 不过,要完成楼主的第二项任务应该借助工具了吧。

作者: HAT     时间: 2008-10-13 23:33    标题: Re 6楼

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

作者: 23112656     时间: 2008-10-14 01:40
HAT大哥. set .是什么意思啊?

作者: 26933062     时间: 2008-10-14 02:01
@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!

作者: HAT     时间: 2008-10-14 09:33    标题: 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'

作者: wjcing     时间: 2008-10-14 09:38
哇..都是牛人...又学了N多东东.. 谢谢大家了....非常感谢..

作者: HAT     时间: 2008-10-14 10:23
这样效率更高些
@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!

作者: wjcing     时间: 2008-10-14 10:24
好的..谢谢..hat版主..

作者: pkto     时间: 2009-1-15 01:06
答案有误,应该在txt文件里读取数字,再自动操作,而非在批处理中手工录入