sort 命令
用途
排序文件、对已排序的文件进行合并,并检查文件以确定它们是否已排序。
语法
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 ] ... [ File ... ]
描述
sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。-(减号)代替文件名指定标准输入。如果您不指定任何文件名,那么该命令对标准输入排序。可以使用 -o 标志指定输出文件。
如果不指定任何标志,sort 命令基于当前语言环境的整理顺序对输入文件的所有行排序。
标志
注:在任何排序关键字定义前出现的 -b、 -d、 -f、 -i、 -n 或 -r 标志应用于所有排序关键字。 -b、 -d、 -f、 -i、 -n 或 -r 标志都不能单独出现在 -k KeyDefinition 之后;如果它们作为修饰符连接 KeyDefinition 变量,那么就只应用于连接排序关键字。如果这些标志之一跟随在 + Fskip.Cskip 或 - Fskip.Cskip 排序关键字定义后,那么该标志只能用于此排序关键字。
退出状态
该命令返回以下出口值:
0 | 所有输入文件成功输出,或指定了 -c 且正确排序了输入文件。 |
1 | 在 -c 选项下,文件没有按指定排序,或如果指定 -c 和 -u 选项,找到了两个具有相同关键字的输入行。 |
>1 | 发生错误。 |
示例
- 要在 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 取代)。
- 要将包含大写字母和具有类似小写行的特殊字符行分组,请输入:
-d 标志忽略特殊字符,-f 标志忽略大小写差异。将 LC_ALL、LC_COLLATE 或 LANG 环境变量设置为 C 的情况下,fruits 文件的输出结果变为:
apple apple %%banana banana ORANGE orange Persimmon
- 要除去重复行排序,请输入:
-u 标志告诉 sort 命令除去重复的行,使文件中的每一行唯一。此命令序列显示:
apple %%banana orange Persimmon
不仅除去重复的 apple,而且也除去了 banana 和 ORANGE。除去这些是因为 -d 标志忽略 %% 这个特殊字符,-f 标志忽略大小写差异。
- 要如例 4 那样排序,除去重复的实例(除非是大写字母或标点不同),请输入:
输入 +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 之前。
- 要排序数字,请输入:
此命令序列按照第二个字段对 vegetables 文件进行数字排序。如果 vegetables 文件与示例 6 中的相同,那么 sort 命令将显示:
radishes:5 turnips:8 lettuce:15 potatoes:15 green beans:32 carrots:104 yams:104
- 要对多个字段排序,请输入:
或
此命令序列对第二字段(+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)。
文件
/usr/bin/sort | 包含 sort 命令。 |
/var/tmp | sort 命令处理期间的临时空间。 |
/usr/tmp | 如果不能在 /var/tmp 中创建文件,是 sort 命令处理期间的临时空间。 |
/tmp | 如果不能在 /var/tmp 或 /usr/tmp 中创建文件,是 sort 命令处理期间的临时空间。 |