您的位置:首页 > 运维架构 > Shell

Shell的sort

2016-06-22 11:37 190 查看

1 sort用法

sort 可以对文本文件进行排序,使用用法:

语法:

sort [ options ] [ file(s) ]


用途:

将输入行按照键值字段与数据类型选项以及locale排序

options的主要选项:

 选项                 说明
-b忽略开头的空白
-c检查输入是否已正确地排序。如输入未经排序,但退出码(exit code)为非零值,则不会有任何输出。
-d字典顺序:仅文字数字与空白才有意义
-g一般数值:以浮点数字类型比较字段。这个选项的动作有点类似 -n,差别仅在于这个选项的数字可能有小数点及指数(例:6.022e+23)。仅GNU版本提供些功能。
-f将混用的字母都看作相同大小写,也就是以不管字母大小 写的方式排序
-i忽略无法打印的字母
-k定义排序键值字段
-m将已排序的输入文件,合并为一个排序后的输出数据流
-n以整数类型比较排序
-o  outfile将输出写到指定的文件,而非标准输出。如果该文件为输入文件之一,则sort在进行排序与写到输出文件之前,会先将它复制到一个临时的文件。
-r设置排序是倒序,如果不设置此选项,则是默认的升序
-t char使用单个字符 char 字段作为默认的字段分隔字符,取代默认的空白字符
-u只有唯一的记录:丢弃所有具相同键值的记录,只留其中的第一条,去掉重复的记录。
sort 会读取指定的文件,如果未给定文件,则读取标准输入,再将排序好的数据写到标准输出。

3 以字段排序

在sort命令中,以字段来排序,一般以 -k 选项来指定排序字段, 而且使用 -t 来指定字段的分界符。如果没有指定 -t 选项,则以空白作为分界符而且记录内的开关和结尾的空白都忽略不记。

一般 -k 选项后面跟着是一个字段编号,或是一对数字。

如果 -k 仅指定一个字段编号,则排序键值会从该字段开始,一直继续到记录的结尾(不是字段的结尾)

如果 -k 是指定一对用逗号分隔的数字,则键值将由第一字段值的起始处开始,结束于第二个字段值的结尾。

如果使用点号分隔,如:

-k2.4, 5.6


则是表示从第2个字段的第4个字符开始比较,一直比较到第5个字段的第6个字符。

当出现多个 -k 选项时,会先从第一个键值的字段开始排序,找出匹配的该键值的记录后,再进行第二个键值字段的排序,以此类推。

例子

sort -t: -k4n -k3n /etc/passwd


先以第4列按整数排序,排序出来的结果再以第3列以整数进行排序

例子

> sort -t: -k1,1 /etc/passwd

abrt:x:173:173::/etc/abrt:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin


以冒号隔开的第一 个字段,用户名进行排序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: