功能:



sort 命令对 File 参数指定的文档中的行排序,并将结果写到标准输出。假如 File 参数指定多个文档,

那么 sort 命令将这些文档连接起来,并当作一个文档进行排序。-(减号)代替文档名指定标准输入。

假如您不指定任何文档名,那么该命令对标准输入排序。能够使用 -o 标志指定输出文档。

假如不指定任何标志,sort 命令基于当前语言环境的整理顺序对输入文档的任何行排序。



用法:

NAME
       sort - sort lines of text files
SYNOPSIS
       sort [OPTION]... [FILE]...
DESCRIPTION
       Write sorted concatenation of all FILE(s) to standard output.
       Mandatory arguments to long options are mandatory for short options too.  Ordering options:
       -b, --ignore-leading-blanks
              ignore leading blanks
       -d, --dictionary-order
              consider only blanks and alphanumeric characters
       -f, --ignore-case
              fold lower case to upper case characters
       -g, --general-numeric-sort
              compare according to general numerical value
       -i, --ignore-nonprinting
              consider only printable characters
       -M, --month-sort
              compare (unknown) < ‘JAN’ < ... < ‘DEC’
       -n, --numeric-sort
              compare according to string numerical value
       -r, --reverse
              reverse the result of comparisons
       Other options:
       -c, --check
              check whether input is sorted; do not sort
       -k, --key=POS1[,POS2]
              start a key at POS1, end it at POS2 (origin 1)
       -m, --merge
              merge already sorted files; do not sort
       -o, --output=FILE
              write result to FILE instead of standard output
       -s, --stable
              stabilize sort by disabling last-resort comparison
       -S, --buffer-size=SIZE
              use SIZE for main memory buffer
       -t, --field-separator=SEP
              use SEP instead of non-blank to blank transition
       -T, --temporary-directory=DIR
              use DIR for temporaries, not $TMPDIR or /tmp; multiple options specify multiple directories
       -u, --unique
              with -c, check for strict ordering; without -c, output only the first of an equal run
       -z, --zero-terminated
              end lines with 0 byte, not newline
       --help display this help and exit
       --version
              output version information and exit

解释;

# -A 使用 ASCII 整理顺序代替当前语言环境的整理顺序在逐字节的基础上排序。

-b 忽略前导空格和制表符,找出字段的第一或最后列。

-c 检查输入是否已按照标志中指定的排序规则进行排序。假如输入文档排序不正确,就返回一个非零值。

-d 使用字典顺序排序。比较中仅考虑字母、数字和空格。

-f 比较前将任何小写字母改成大写字母。

-i 比较中忽略任何非显示字符。

-k KeyDefinition 指定排序关键字。KeyDefinition 选项的格式为:

[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]

排序关键字包括任何以 FStart 变量指定的字段和 CStart 变量指定的列开头的字符及以 FEnd 变量指定的字段和

CEnd 变量指定的列结束的字符。Modifier 变量的值能够是 b、d、f、i、n 或 r。修饰符和同一字母的标志等价。

-m 只合并多个输入文档;假设输入文档已排序。

-n 按算术值对数字字段排序。数字字段可包含前导空格、可选减号、十进制数字、千分位分隔符和可选基数符。

对包含任何非数字字符的字段进行数字排序会出现无法预知的结果。

-o OutFile 将输出指向 OutFile 参数指定的文档,而不是标准输出。OutFile 参数值能够和 File 参数值相同。

-r 颠倒指定排序的顺序。

-t Character 指定 Character 为单一的字段分隔符。

-u 禁止按照排序关键字和选项的任何等同排序(每一组行中一行除外)。

-T Directory 将创建的任何临时文档放入 Directory 参数指定的目录中。

-y[Kilobytes] 用 Kilobytes 参数指定的主存储的千字节数启动 sort 命令,并根据需要增加存储量。

(假如  Kilobytes 参数指定的值小于最小存储站点或大于最大存储站点,就以这个最小存储站点或最大存储站点取代)。

假如省略 -y 标志,sort 命令以缺省的存储大小启动。

-y0 标志用最小存储启动,而 -y 标志(不带 Kilobytes 值)用最大存储启动。sort 命令使用的存储量显著地影响性能。

以大存储量对小文档排序将很浪费。

-z RecordSize 假如正在排序的任一行大于缺省的缓冲区大小,要防止出现异常终止。

指定 -c 或 -m 标志时,省略排序阶段,使用系统的缺省缓冲大小。假如已排序行超出这一大小,排序异常终止。

-z 选项指定排序阶段最长行的记录,因而可在合并阶段分配足够的缓冲区。

RecordSize 必须指明等于或大于要合并的最长行的字节值。


实例:

[root@uyhd000225 testDir]# cat fruits
banana
orange
Persimmon
apple
%%banana
apple
ORANGE
[root@uyhd000225 testDir]# sort fruits
apple
apple
banana
%%banana
orange
ORANGE
Persimmon
[root@uyhd000225 testDir]# sort -A fruits
sort:无效选项 -- A
请尝试执行“sort --help”来获取更多信息。
[root@uyhd000225 testDir]# echo $LANG
zh_CN.UTF-8
[root@uyhd000225 testDir]# LANG=En_US sort fruits
%%banana
ORANGE
Persimmon
apple
apple
banana
orange
[root@uyhd000225 testDir]# echo $LANG
zh_CN.UTF-8
[root@uyhd000225 testDir]#

LANG=En_US sort fruits
此命令序列显示以升序词典顺序排序的 fruits 文档的内容。每一列的字符,包括空格、数字和特别字符都经一一比较。 在 ASCII 整理序列中,%(百分号)在大写字母前,大写字母在小写字母前。
假如您当前的语言环境指定 ASCII 之外的字符集,结果可能不同。

以字典顺序怕排序:

[root@uyhd000225 testDir]# sort -d fruits
apple
apple
banana
%%banana
orange
ORANGE
Persimmon

-d 标志忽略 %(百分号)字符,因为他不是个字母、数字或空格。(即 %%banana 被 banana 取代)。



[root@uyhd000225 testDir]# sort -df fruits
apple
apple
banana
%%banana
orange
ORANGE
Persimmon

-d 标志忽略特别字符,-f 标志忽略大小写差异。



[root@uyhd000225 testDir]# sort -dfu fruits
apple
banana
orange
Persimmon
[root@uyhd000225 testDir]#

-u 标志告诉 sort 命令除去重复的行,使文档中的每一行唯一。

除去这些是因为 -d 标志忽略 %% 这个特别字符,-f 标志忽略大小写差异。



sort  -u +0  -d -f +0 fruits
输入 +0 -d -f 完成的排序和示例 3 中 -d -f 的排序类型相同,+0 进行另一项比较以区分不相同的行。
这防止 -u 标志将他们除去。
示例 1 所示的 fruits 文档中,添加的 +0 将 %%banana 和 banana 及 ORANGE 和 orange 区分开来。
然而,apple 的两个实例是相同的,所以其中之一被删除。
apple
%%banana
banana
ORANGE
orange
Persimmon




sort  -t: +1 vegetables
此命令序列排序 vegetables 文档,对每一行上第一个冒号后的文本进行比较。
+1 告诉 sort 命令忽略第一字段,从第二字段的开始到该行的结束进行比较。-t: 标志告诉 sort 命令冒号分隔字段。
假如 vegetables 包含:
yams:104
turnips:8
potatoes:15
carrots:104
green beans:32
radishes:5
lettuce:15
那么,将 LC_ALL、LC_COLLATE 或 LANG 环境变量配置为 C 的情况下,sort 命令将显示:
carrots:104
yams:104
lettuce:15
potatoes:15
green beans:32
radishes:5
turnips:8
注意数字没有按照数字排序。当用字典式分类从左至右比较每一个字符时出现这种情况。
换句话说,3 在 5 之前,所以 32 在 5 之前。



sort  -t: +1  -n vegetables
此命令序列按照第二个字段对 vegetables 文档进行数字排序
假如 vegetables 文档和示例 6 中的相同,那么  sort 命令将显示:
radishes:5
turnips:8
lettuce:15
potatoes:15
green beans:32
carrots:104
yams:104



  • 要对多个字段排序,请输入:

sort  -t: +1 -2  -n +0 -1  -r vegetables

sort -t: -k2,2 n -k1,1 r vegetables
此命令序列对第二字段(+1 -2 -n)进行数字排序。在这个顺序中,它以逆字母顺序(+0 -1 -r)对第一字段排序。
将 LC_ALL、LC_COLLATE 或 LANG 环境变量设置为 C 的情况下,输出将类似于:
radishes:5
turnips:8
potatoes:15
lettuce:15
green beans:32
yams:104
carrots:104

此命令按数字顺序对行排序。当两行数字相同时,它们以逆字母顺序出现。

  • 要使用排序的文本替换原始文件,请输入:

sort  -o vegetables vegetables
此命令序列将排序输出存入 vegetables 文件( -o vegetables)。


以第2个字段作为排序关键字对文件example的内容进行排序。
$ sort +1-2 example

对于example (file1和file2)文件内容反向排序,结果放在outfile中,利用第2个字段的第一个字符作为排序关键字。
$ sort -r -o outfile +1.0 -1.1 example

sort排序常用于在管道中与其他命令连用,组合完成比较复杂的功能,如利用管道将当前工作目录中的文件送给sort进行排序,排序关键字是第6个至第8个字段。
$ ls - l | sort +5 - 7

sort命令也可以对标准输入进行操作。例如,如果您想把几个文件文本行合并,并对合并后的文本行进行排序,您可以首先用命令cat把多个文件合并,然
后用管道操作把合并后的文本行输入给命令sort,sort命令将输出这些合并及排序后的文本行。在下面的例子中,文件veglist与文件
fruitlist的文本行经过合并与排序后被保存到文件clist中。

$ cat veglist fruitlist | sort > clist


用户可以保存排序后的文件内容,或把排序后的文件内容输出至打印机。下例中用户把排序后的文件内容保存到名为result的文件中。

  $ sort text>result