功能:
sort 命令对 File 参数指定的文档中的行排序,并将结果写到标准输出。假如 File 参数指定多个文档,
那么 sort 命令将这些文档连接起来,并当作一个文档进行排序。-(减号)代替文档名指定标准输入。
假如您不指定任何文档名,那么该命令对标准输入排序。能够使用 -o 标志指定输出文档。
假如不指定任何标志,sort 命令基于当前语言环境的整理顺序对输入文档的任何行排序。
用法:
NAME sort - sort lines of text filesSYNOPSIS 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 fruitsbananaorangePersimmonapple%%bananaappleORANGE[root@uyhd000225 testDir]# sort fruitsappleapplebanana%%bananaorangeORANGEPersimmon[root@uyhd000225 testDir]# sort -A fruitssort:无效选项 -- A请尝试执行“sort --help”来获取更多信息。[root@uyhd000225 testDir]# echo $LANGzh_CN.UTF-8[root@uyhd000225 testDir]# LANG=En_US sort fruits%%bananaORANGEPersimmonappleapplebananaorange[root@uyhd000225 testDir]# echo $LANGzh_CN.UTF-8[root@uyhd000225 testDir]#
LANG=En_US sort fruits
此命令序列显示以升序词典顺序排序的 fruits 文档的内容。每一列的字符,包括空格、数字和特别字符都经一一比较。 在 ASCII 整理序列中,%(百分号)在大写字母前,大写字母在小写字母前。
假如您当前的语言环境指定 ASCII 之外的字符集,结果可能不同。
以字典顺序怕排序:
[root@uyhd000225 testDir]# sort -d fruitsappleapplebanana%%bananaorangeORANGEPersimmon
-d 标志忽略 %(百分号)字符,因为他不是个字母、数字或空格。(即 %%banana 被 banana 取代)。
[root@uyhd000225 testDir]# sort -df fruitsappleapplebanana%%bananaorangeORANGEPersimmon
-d 标志忽略特别字符,-f 标志忽略大小写差异。
[root@uyhd000225 testDir]# sort -dfu fruitsapplebananaorangePersimmon[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