1.sort命令

sort命令可以给文本进行排序。sort命令操作的是行。

shell中sort命令有3中执行模式,分别是排序文本,检查文件是否已经排序,合并文件。


2.sort的使用

语法:

sort [选项] ...  [文件] ...


选项:

-b:忽略前面空格。

-c:测试文件是否已经排序。

-d:根据字典顺序排序,仅比较数字 字母 空格等字符。

-f:忽略大小写。

-i:仅比较可打印字符。

-n:纯数字排列

-R:根据哈希值随机排序。

-r:反向,颠倒顺序。

-k:定义排序关键字。原来的:第几个区间,与t相辅。

-t:分隔符

-m:仅仅合并已经排序好的文件,不执行排序操作。

-s:稳定的排序算法。

-o:排序结果写入文件,而不是标准输出到设备。

-u:相同的行只留一行

-M:月份


文件:

file:多个文件要使用空格分隔。


3.范例

3.1 不加选项进行升序排序

直接执行sort,不加选项,默认根据第一列的信息进行排序。

sort命令


3.2 使用单行关键字排序 -k

默认是根据第一列来排序,使用-k选项来定义排序的关键字,语法如下:

-k pos1 [, pos2]

pos1 表示起始位置,pos2 表示结束位置。如果关键字的第一列相同,进行比较第二列。

-k pos 并不是表示只比较 pos 列,而是比较从 pos 列,到行尾的列。

sort命令


如何根据日志里面小时进行排序呢?(日志里的小时和日期写在一起,还有英文)

那就根据某列的第几个字符开始。格式如下:

-k pos1[.start] [, pos2[.end]]

pos1 表示起始位置,pos2 表示结束位置。

start 表示起始列的第几个字符。end 表示结束列的第几个字符。

案例略。

3.3 根据关键字降序排序 -r

默认的需要是升序排序,如果想倒叙排列,需要使用-r选项。

sort命令


3.4 数值列的排序 -n

默认的排序是一个字符一个字符的比较。不能正确的比较出数值的大小,如果想比较出数值的大小需要使用 -n 选项。语法如下:两个等价

sort -n -k 2 1.txt

sort -k 2,2n 1.txt

上面的默认的排序,下面的是数值排序。上面的就把992排在了最下面。因为第一个字符9最大。

sort命令


3.5 自定义分隔符 -t

如果分隔符不是空格或者制表符,需要使用-t选项来指定分隔符。

sort -t ":" -r -k 3 /etc/passwd

sort命令


3.6 删除重复的行 -u

使用-u选项,可以去掉重复的行,但是不知道为什么去不掉带空格的那行。

sort命令



3.7 根据多个关键字排序 -k -k

根据第一个列升序,和第二列数字倒叙,应该怎么排。

sort -k 1,1 -k 2,2rn 1.txt

sort命令


3.8 合并文件

sort可以将两个文件合并,同时对文件内容进行排序,语法如下:

sort file1  file2 ... > filen

sort命令