语法格式sort [ -A ] [ -b ] [ -c ] [ -d ] [ -f ] [ -i ] [ -m] [ -n ] [ -r ] [ -u ] [ -o OutFile ]
[ -t Character ] [ -T Directory ] [ -y [ Kilobytes ] ] [ -z RecordSize ] [ [ + [ FSkip ]
[ .CSkip ] [ b ] [ d ] [ f ] [ i ] [ n ] [ r ] ] [ - [ FSkip ] [ .CSkip ] [ b ] [ d ] [ f ]
[ i ] [ n ] [ r ] ] ] [ -k KeyDefinition ] [文档 ]
使用说明sort 命令对 File 参数指定的文档中的行排序,并将结果写到标准输出。假如 File 参数指定多个文档,
那么 sort 命令将这些文档连接起来,并当作一个文档进行排序。-(减号)代替文档名指定标准输入。
假如您不指定任何文档名,那么该命令对标准输入排序。能够使用 -o 标志指定输出文档。
假如不指定任何标志,sort 命令基于当前语言环境的整理顺序对输入文档的任何行排序。
主要参数-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 必须指明等于或大于要合并的最长行的字节值。
应用实例
- 要在 LC_ALL、LC_COLLATE 或 LANG 环境变量配置为 En_US 的情况下排序 fruits 文档,请输入:
LANG=En_US sort fruits
此命令序列显示以升序词典顺序排序的 fruits 文档的内容。每一列的字符,包括空格、数字和特别字符都经一一比较。
例如,假如 fruits 文档包含文本:
banana
orange
Persimmon
apple
%%banana
apple
ORANGE
sort 命令显示:
%%banana
ORANGE
Persimmon
apple
apple
banana
orange
在 ASCII 整理序列中,%(百分号)在大写字母前,大写字母在小写字母前。
假如您当前的语言环境指定 ASCII 之外的字符集,结果可能不同。
sort -d fruits
此命令序列排序和显示 fruits 文档的内容,并且只比较字母、数字和空格。
假如 fruits 文档和示例 1 相同,那么 sort 命令显示:
ORANGE
Persimmon
apple
apple
%%banana
banana
orange
-d 标志忽略 %(百分号)字符,因为他不是个字母、数字或空格。(即 %%banana 被 banana 取代)。
- 要将包含大写字母和具备类似小写行的特别字符行分组,请输入:
sort -d -f fruits
-d 标志忽略特别字符,-f 标志忽略大小写差异。
将 LC_ALL、LC_COLLATE 或 LANG 环境变量配置为 C 的情况下,fruits 文档的输出结果变为:
apple
apple
%%banana
banana
ORANGE
orange
Persimmon
sort -d -f -u fruits
-u 标志告诉 sort 命令除去重复的行,使文档中的每一行唯一。此命令序列显示:
apple
%%banana
ORANGE
Persimmon
不但除去重复的 apple,而且也除去了 banana 和 ORANGE。
除去这些是因为 -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)。
linux sort 命令详解
sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上,sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。 Sort命令将逐行对文件中的内容进行排序,如果两行的首字符相同,该命令将继续比较这两行的下一字符,如果还相同,将继续进行比较。 语法: sort [选项] 文件 说明:sort命令对指定文件中所有的行进行排序,并将结果显示在标准输出上。如不指定输入文件或使用"- ",则表示排序内容来自标准输入。 sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。缺省情况下以整行为关键字按ASCII字符顺序进行排序。 改变缺省设置的选项主要有: - m 若给定文件已排好序,合并文件。 - c 检查给定文件是否已排好序,如果它们没有都排好序,则打印一个出错信息,并以状态值1退出。 - u 对排序后认为相同的行只留其中一行。 - o 输出文件 将排序输出写到输出文件中而不是标准输出,如果输出文件是输入文件之一,sort先将该文件的内容写入一个临时文件,然后再排序和写输出结果。 改变缺省排序规则的选项主要有: - d 按字典顺序排序,比较时仅字母、数字、空格和制表符有意义。 - f 将小写字母与大写字母同等对待。 - I 忽略非打印字符。 - M 作为月份比较:"JAN"<"FEB" - r 按逆序输出排序结果。 +posl - pos2 指定一个或几个字段作为排序关键字,字段位置从posl开始,到pos2为止(包括posl,不包括pos2)。如不指定pos2,则关键字为从posl到行尾。字段和字符的位置从0开始。 - b 在每行中寻找排序关键字时忽略前导的空白(空格和制表符)。 - t separator 指定字符separator作为字段分隔符。 下面通过几个例子来讲述sort的使用。
用sort命令对text文件中各行排序后输出其结果。请注意,在原文件的第二、三行上的第一个单词完全相同,该命令将从它们的第二个单词vegetables与fruit的首字符处继续进行比较。 $ cat text vegetable soup fresh vegetables fresh fruit lowfat milk $ sort text fresh fruit fresh vegetables lowfat milk vegetable soup 用户可以保存排序后的文件内容,或把排序后的文件内容输出至打印机。下例中用户把排序后的文件内容保存到名为result的文件中。 $ sort text>result
以第2个字段作为排序关键字对文件example的内容进行排序。 $ sort +1-2 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 |
来自:
阅读(1328) | 评论(0) | 转发(0) |