sort [选项] 文件
功能
sort
命令排列文本行,并把文件打印输出到屏幕上。
举例
假设文件 forsort1
如下:
$cat forsort1
yams:104
turnips:8
potatoes:15
carrots:104
green beans:32
carrots:104
radishes:5
lettuce:15
注:网上说的,设在 LC_ALL
、 LC_COLLATE
或 LANG
环境变量设置为 En_US
的情况下排序,我看我的机器上面只有 LANG=zh_CN.UTF-8
,实践之后发现,有的排序混乱了,设置为 LANG=En_US
就行了
对文件内容按行排序,结果输出到标准输出
$sort forsort1
输入之后,输出如下:
carrots:104
carrots:104
green beans:32
lettuce:15
potatoes:15
radishes:5
turnips:8
yams:104
这里, forsort
的内容将会按行由小到大重新排列,如果有多个关键字(默认空白分割),开始几个关键字相同的行,将继续按照次关键字进行排序。
逆序对文件内容进行排序,结果输出到标准输出
$sort -r forsort1
输入之后,输出如下:
yams:104
turnips:8
radishes:5
potatoes:15
lettuce:15
green beans:32
carrots:104
carrots:104
这里,可以看出,结果和 sort forsort1
相反。
对文件内容排序,结果输出到 out.txt
文件中
$sort forsort1 -o out.txt
这里.使用 -o
选项指定输出文件,结果和 sort forsort1
唯一不同的是结果没有输出到标准输出而是输出到了 out.txt
文件中。
排序,相同的行只保留一行
$sort -u forsort1
输入之后,输出如下:
carrots:104
green beans:32
lettuce:15
potatoes:15
radishes:5
turnips:8
yams:104
这里,将两个 carrots
行删去了一个。
指定分隔字段的字符为 :
,然后按第2个关键字进行排序
$sort -t: -k 2 forsort1
输入之后,输出如下:
carrots:104
carrots:104
yams:104
lettuce:15
potatoes:15
green beans:32
radishes:5
turnips:8
这里, -t
指定分割符号, -k
指定位置(默认1), -t
和 -k
后面的空格可有可无;如果位置是从第2个到第4个,那么这样: sort -k2,4 forsort1
先根据第3字段排序,相等再根据第4列排序 /etc/passwd
$sort -t: -k3 -k4 -n /etc/passwd
这里,因为需要比较多列,所以就再加上 -k
, -n
表示根据字符串数字值进行排序。
对第2个字段按照数字的值进行排序
$sort -t: -k2 -n forsort1
输入之后,输出如下:
radishes:5
turnips:8
lettuce:15
potatoes:15
green beans:32
carrots:104
carrots:104
yams:104
这里, -n
按照数字方式排序,不加 -n
参数时排序结果根据最左面的数字开始,等同于字母的比较方式。
描述
sort
命令提供了一种以字母或者数字顺序快速组织数据的方法。
默认方式下, sort
命令使用 white space
来分割文件中的不同域、排序文件、对已排序的文件进行合并,并检查文件以确定它们是否已排序。
使用排序关键字时, sort
命令首先根据第一个排序关键字的内容对所有行排序;然后,根据第二个排序关键字的内容,对所有第一个排序关键字相同的行排序,如此进行下去;按照排序关键字在命令行中出现的顺序给它们编号,如果两行对所有排序关键字的排序都相同,则对全部行依据当前语言环境的整理顺序进行比较。如果不指定任何标志, sort
命令基于当前语言环境的整理顺序对输入文件的所有行排序。
sort
命令对 File
参数指定的文件中的行排序,并将结果写到标准输出。如果 File
参数指定多个文件,那么 sort
命令将这些文件连接起来,并当作一个文件进行排序。 -
(减号)代替文件名指定标准输入。如果您不指定任何文件名,那么该命令对标准输入排序。可以使用 -o
标志指定输出文件。
主要参数
-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
必须指明等于或大于要合并的最长行的字节值。