Board logo

标题: [原创] 【续】[一日一教学](48)字符串排序:sort [打印本页]

作者: Hello123World    时间: 2012-1-6 13:49     标题: 【续】[一日一教学](48)字符串排序:sort

本帖最后由 Hello123World 于 2012-1-20 14:37 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html


帮助信息:
  1. SORT [/R] [/+n] [/M kilobytes] [/L locale] [/REC recordbytes]
  2.   [[drive1:][path1]filename1] [/T [drive2:][path2]]
  3.   [/O [drive3:][path3]filename3]
  4.   /+n                         指定开始每个比较的字符号码 n。/+3 说明每个
  5.                               比较应从每行的第三个字符开始。少于 n 个字符
  6.                               的行排在其他行之前。按默认值,从每行的第一
  7.                               个字符开始比较。
  8.   /L[OCALE] locale            用指定的区域设置替代系统默认区域设置。
  9.                               ""C"" 区域设置产生最快的排序顺序并且是当前
  10.                               的唯一其他选择。排序总是不分大小写的。
  11.   /M[EMORY] kilobytes         指定用于排序的主内存量,单位为 KB。
  12.                               最小内存量总是 160 KB。如果指定内存大小,
  13.                               无论主内存的可用量是多少,指定的内存量会
  14.                               全部用于排序。
  15.                               要取得最佳性能,通常不指定内存大小。按默认
  16.                               值,如果达到默认最大内存值,排序会一次完成
  17.                               (非临时文件);否则,排序会分两次完成(没有
  18.                               完全排序的数据存储在临时文件中);用于排序
  19.                               和合并的内存量相等。如果输入和输出都是文
  20.                               件,默认最大内存量为可用主内存的 90%;
  21.                               否则,为主内存的 45%。
  22.   /REC[ORD_MAXIMUM] characters 指定记录中的最大字符数量
  23.                               (默认值为 4096,最大值为 65535)。
  24.   /R[EVERSE]                  颠倒排序顺序,即,从 Z 到 A,再从 9 到 0。
  25.   [drive1:][path1]filename1   指定要排序的文件。如果没有指定,则排序标准
  26.                               输入。指定输入文件比将同一个文件重定向为标
  27.                               准输入快。
  28.   /T[EMPORARY]
  29.     [drive2:][path2]          指定保留排序工作存储的目录路径,以防主内
  30.                               存无法容纳数据。默认值是使用系统临时目录。
  31.   /O[UTPUT]
  32.     [drive3:][path3]filename3 指定在哪个文件中储存经过排序的输入。
  33.                               如果没有指定,数据会被写入标准输出。指定
  34.                               输出文件比将标准输出重定向到同一个文件快。
复制代码
.


命令概括:

sort,意为“以……排序”。

/r,全英文reverse,意为“颠倒”。
/+n,还是number,意为“数字”。
/m,全英文memory,意为“内存”。
/l,全英文locale,意为“场所”,引申为“区域设置”。
/rec,全英文record,意为“记录”。
/t,全英文temporary,意为“临时的”。
/o,全英文output,意为“输出”。


参数详解:

1.不带任何参数的sort命令

不带任何参数的sort命令,比较第一个字符的大小(字母不区分大小写),按“顺序排列”输出(a-z,0-9)。


例如:
ip.txt
  1. apple
  2. believe
  3. change
  4. desktop
  5. everything
  6. flight
  7. ground
  8. hello
  9. ignore
  10. joke
  11. knowledge
  12. little
  13. memory
  14. normal
  15. outside
  16. Police
  17. quickly
  18. refrigerator
  19. smell
  20. technology
  21. until
  22. violin
  23. water
  24. xenophobia
  25. yellow
  26. zero
复制代码
.

利用sort进行排序。
代码:
  1. C:\Users\HELLOW~1\Desktop>sort ip.txt
复制代码
.

结果:
和ip.txt一摸一样,因为ip.txt中的单词第一个字符顺序都是按“a-z”排列的。


2.利用sort,按单词的第二个字符顺序排列

同样对ip.txt进行处理。

代码:
  1. C:\Users\HELLOW~1\Desktop>sort /+2 ip.txt
复制代码
.

效果:
  1. water
  2. technology
  3. refrigerator
  4. believe
  5. hello
  6. yellow
  7. memory
  8. xenophobia
  9. zero
  10. desktop
  11. ignore
  12. change
  13. violin
  14. little
  15. flight
  16. smell
  17. knowledge
  18. until
  19. joke
  20. Police
  21. normal
  22. apple
  23. ground
  24. quickly
  25. outside
  26. everything
复制代码
.

这一次的排序是按照第二个字符的“顺序排列”(a-z)进行排列的。

结合1、2节不难看出,其实sort ip.txt 的效果等同于 sort /+1 ip.txt。


3.倒序排列

既然可以123,自然可以321。sort命令也可以倒序排列并输出。

①.通常的倒序方法(按字母倒序)
代码:
  1. sort /r ip.txt
复制代码
.

效果:
  1. zero
  2. yellow
  3. xenophobia
  4. water
  5. violin
  6. until
  7. technology
  8. smell
  9. refrigerator
  10. quickly
  11. Police
  12. outside
  13. normal
  14. memory
  15. little
  16. knowledge
  17. joke
  18. ignore
  19. hello
  20. ground
  21. flight
  22. everything
  23. desktop
  24. change
  25. believe
  26. apple
复制代码
.

②.特殊的倒序方法(按文本倒序,由Crlf版主友情提供)

代码:
  1. sort /+13 ip.txt
复制代码
.

效果:
同第一种方法。

说明:

ip.txt中最长的单词是“refrigerator”,合计有12个字母,这里sort 比较第13个字母的大小,但是所有的单词都没有13个字母(最长的才12),此时按文本倒序排列。

所以只要你将/+n中,n的值设置的足够大,此时按文本倒序输出。

由于开篇的ip.txt内容没设置好,导致按字母倒序和按文本倒序产生了相同的结果,事实上这是两种完全不同的排序方法。按字母倒序是根据字母规则(a-z,0-9)进行倒序排列,按文本倒序是将最后一行文本作为第一行,第一行作为最后一行(简而言之就是文本行颠倒)。

例子(由Crlf版主友情提供):

test.bat:
  1. @echo off
  2. sort /r ip.txt
  3. echo;
  4. sort /+1000 ip.txt
  5. pause
复制代码
.

ip.txt:
  1. 123
  2. abc
  3. 测试
  4. @#¥
  5. ABC
复制代码
.

结果:
  1. 测试
  2. abc
  3. ABC
  4. 123
  5. @#¥
  6. ABC
  7. @#¥
  8. 测试
  9. abc
  10. 123
  11. 请按任意键继续. . .
复制代码
.

4.将排序结果输出到文件

①.利用重定向符,将排序结果输出到文件
代码:
  1. sort ip.txt>hello1.txt
复制代码
.

效果:
在当前文件夹中生成hello1.txt,内容为:
  1. @#¥
  2. 123
  3. abc
  4. ABC
  5. 测试
复制代码
.

②.利用sort的/o参数,将排序结果输出到文件
代码:
  1. sort ip.txt /o hello2.txt
复制代码
.

效果:
在当前文件夹中生成hello2.txt,内容同hello1.txt。

两者的差别:

根据微软的机器翻译“指定输出文件比将同一文件作为标准输出重定向速度快”,也就是说/o参数比重定向符(>)快,这个不好实际测试,有这么个映象就可以了。


5.对/m,/t参数的一些说明

/m参数是用来指定参与排序的内存,换句话说就是“你分多少内存(单位kb)给sort命令排序”。

/t参数是用来指定缓存文件的目录,举个例子来说,我要处理8m的大文本,指定内存为500kb,500kb怎么装得下8m的文件?这时怎么办呢?——(按1m=1000kb算)先将500kb装入内存,再将剩下的7500kb分15次装入内存,缓存文件放在/t指定的目录中。


例如:


16.txt是一个8m的文本(要做测试的同学,可以到网上下本小说)。
代码:
  1. >22.txt sort 16.txt  /m 500 /t C:\dcache
复制代码
.

说明:
16.txt是一本小说,用sort排序之后自然是“惨不忍睹”的,对于结果没有什么好说的,主要说说这行代码运行后产生的一些问题。

问题1.运行代码后,提出警告信息“警告: 做大量排序时使用重定向输出通常比直接指定输出文件名称来排序慢。”——这个前面说过了“/o参数比重定向符(>)快”。

问题2.运行代码后,在目录C:\dcache中产生了一个以“srt”+16进制随机数命名的.tmp文件,出现过几秒,后被系统删除(没用/t参数指定的目录时,默认缓存文件目录是%temp%)。

问题3.当我将/m指定的内存数500kb变为160kb(160kb是sort命令默认的最小内存)时,竟然提示“没有足够的内存,无法完成排序。”

由问题引出的简单思考:

既然是简单思考,自然不会分析的太过深入。

问题1.如果说/o比重定向符(>)快,而且有时用重定向符(>)还会出现“警告”,那么完全可以舍弃重定向符(>),只要想输出排序结果就用/o参数。

问题2.缓存文件产生的原因是指定了内存的大小,不指定就不会出现,也就是说“不用/m参数就不会出现缓存文件,而不用/m参数,/t参数也没用”。

问题3.不指定用于排序的内存大小,就不会提示“内存不足”,那么不用/m参数不就好了。


总结:sort的/m,/t参数完全可以不用。估计这两个参数,是为了dos时代而准备的,现在的电脑内存——我这台“老爷机”都有1G的内存,实在想不出为了区区几十M的文件分配内存有什么意义。



6./rec参数(指定sort能处理的最大行)

这里的“最大行”,不是说文本中有多少行,而是说一行中最多可以含有多少字符数。

sort命令默认的文本最大行含有4096个字符(2的12次幂),最多可以含有65535个字符。

这里设置了一个特殊的文本a.txt来加以说明。

a.txt中一共含有2行文本,每行文本含有4097个字符。
  1. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  2. bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
复制代码
.

代码和结果:
  1. C:\Users\helloworld\Desktop>sort a.txt
  2. 输入记录超过最大长度。请指定更大的最大限度。
  3. C:\Users\helloworld\Desktop>sort /rec 4097 a.txt
  4. 正确回显。
复制代码
.



没讲的内容,/l参数,这个是区域设置相关,我也没弄懂。


扩展阅读:

暂无。
作者: find    时间: 2012-1-6 14:30

有没有具体的例子可以学习一下啊?
作者: CrLf    时间: 2012-1-15 00:15

倒序排列不知指的是 /r 还是?
话说我觉得 sort 最神奇的用法之一就是当使用 /+n 的时候,会将少于 n 字符的行逆序输出,所以我们只要设置一个超大的 n 就...嗯嗯,你懂得
作者: Hello123World    时间: 2012-1-16 16:34

回复 3# CrLf


    恩,倒序输出就是指/r参数,语言表达能力不行(逆序输出),呵呵。

这个特性有点意思,不过就应用来说,如果只是为了倒序输出,直接加/r参数不是更好吗?还是还有什么其它的应用?
作者: CrLf    时间: 2012-1-16 16:43

回复 4# Hello123World


    区别在于是对原文顺序逆序还是对排序顺序逆序
作者: Hello123World    时间: 2012-1-16 16:55

回复 5# CrLf


    不明白,原文顺序逆序和排序顺序逆序有什么差别?

能举个例子吗
作者: CrLf    时间: 2012-1-16 17:00

test.bat:
  1. @echo off
  2. sort /r test.txt
  3. echo;
  4. sort /+1000 test.txt
  5. pause
复制代码
test.txt:
  1. 123
  2. abc
  3. 测试
  4. @#¥
  5. ABC
复制代码

作者: Hello123World    时间: 2012-1-17 16:19

回复 7# CrLf


    这里有个新问题想问一下,这些字符的排序不是根据ascii码来的,那是根据什么规则进行排序的?
  1. sort test.txt
复制代码
结果:
  1. @#¥
  2. 123
  3. abc
  4. ABC
  5. 测试
复制代码
.

符号=ascii码
@=64
1=49
a=97
A=65
测=未知
作者: CrLf    时间: 2012-1-17 17:10

回复 8# Hello123World


    貌似跟 nls 有关系...至于大小写字母为何有的在前有的在后,其实帮助中也有提到:
排序总是不分大小写的。

作者: Hello123World    时间: 2012-1-18 00:43

回复 9# CrLf
  1. C:\Users\helloworld\Desktop>sort /r ip.txt
  2. 测试
  3. abc
  4. ABC
  5. 123
  6. @#¥
复制代码
恩,排序不区分大小写,比较倒序、顺序可以看出来。
作者: cjiabing    时间: 2012-1-19 23:24

sort是一个按列操作的家伙,假如你指定了/+n,则它就从改行开始按顺序,当然,在这之前的也会按顺序,只是开头由它指定了。
作者: qixiaobin0715    时间: 2021-12-3 09:00

回复 7# CrLf
这是一个bug,但很有用。可惜的是win10系统给修复了。
作者: buyiyang    时间: 2022-3-27 20:57

回复 12# qixiaobin0715


原来已经被修复了,我说怎么没有用




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2