Linux 命令 | 命令 sort

sort 是 Linux 命令中经常使用的一个命令,用于对文本内容进行排序,下面将结合实例进行介绍。

一、基本概念

sort 对输入内容进行排序,输入内容可以是文件或标准输入,默认情况下不修改原文件内容。

二、语法格式和参数

sort [OPTION]... [FILE]...

常用参数:

-t 分隔符 :指定排序时使用的分隔符;

-k : 指定需要排序的列;

-n : 按照数值大小进行排序;

-r : 以相反的顺序排序;

-b : 忽略排序字段或关键字中开头的空格;

-c : 检查待排序内容是否已排序,如果未排序,则输出最开始乱序的列,否则,没有输出;

-o FILE : 将排序结果输出到指定文件,而不是标准输出;

三、实例

实例使用的排序文本内容是经过处理的 /etc/passwd 前10行,如下所示:

[root@localhost ~]# cat passwd-sort
root:x:0:0
bion:x:1:1
daen:x:2:2
adfm:x:3:4
laap:x:4:7
sync:x:5:9
shut:x:6:3
halt:x:7:5
mail:x:8:12
oper:x:11:21
[root@localhost ~]#

3.0 默认

默认情况下,sort 按照 ASCII 码进行排序,如下所示:

[root@localhost ~]# cat passwd-sort
root:x:0:0
bion:x:1:1
daen:x:2:2
adfm:x:3:4
laap:x:4:7
sync:x:5:9
shut:x:6:3
halt:x:7:5
mail:x:8:12
oper:x:11:21
[root@localhost ~]#
[root@localhost ~]# sort passwd-sort
adfm:x:3:4
bion:x:1:1
daen:x:2:2
halt:x:7:5
laap:x:4:7
mail:x:8:12
oper:x:11:21
root:x:0:0
shut:x:6:3
sync:x:5:9
[root@localhost ~]#

3.1 -t 和 -k 参数

以 “:” 为分隔,选取第三列进行排序,如下所示:

[root@localhost ~]# sort -t ":" -k 3 passwd-sort
root:x:0:0
bion:x:1:1
oper:x:11:21
daen:x:2:2
adfm:x:3:4
laap:x:4:7
sync:x:5:9
shut:x:6:3
halt:x:7:5
mail:x:8:12
[root@localhost ~]#

注意:默认会使用 ASCII 码进行排序,从第3行的排列就可以看出。

3.2 -n 参数

以 “:” 为分隔,选取第三列按照数值大小进行排序,如下所示:

[root@localhost ~]# cat passwd-sort
root:x:0:0
bion:x:1:1
daen:x:2:2
adfm:x:3:4
laap:x:4:7
sync:x:5:9
shut:x:6:3
halt:x:7:5
mail:x:8:12
oper:x:11:21
[root@localhost ~]# sort -t ":" -k 3 -n passwd-sort
root:x:0:0
bion:x:1:1
daen:x:2:2
adfm:x:3:4
laap:x:4:7
sync:x:5:9
shut:x:6:3
halt:x:7:5
mail:x:8:12
oper:x:11:21
[root@localhost ~]#

排序结果显示以 “:” 为分隔的第3列的数值从小到大。 

3.3 -r 参数

以 “:” 为分隔,选取第三列按默认方式(即:ACSII 码)进行反向排序,如下所示:

[root@localhost ~]# sort -t ":" -k 3 -r passwd-sort
mail:x:8:12
halt:x:7:5
shut:x:6:3
sync:x:5:9
laap:x:4:7
adfm:x:3:4
daen:x:2:2
oper:x:11:21
bion:x:1:1
root:x:0:0
[root@localhost ~]#

注意 “oper:x:11:21” 所在的行。

 以 “:” 为分隔,选取第三列按数值大小方式进行反向排序,如下所示:

[root@localhost ~]# sort -t ":" -k 3 -r -n passwd-sort
oper:x:11:21
mail:x:8:12
halt:x:7:5
shut:x:6:3
sync:x:5:9
laap:x:4:7
adfm:x:3:4
daen:x:2:2
bion:x:1:1
root:x:0:0
[root@localhost ~]#

排序后,以 “:” 为分隔的第3列的数值从大到小排列。 

3.3 -c 参数

判断输入内容是否已排好序,如下所示:

[root@localhost ~]# cat passwd-sort
root:x:0:0
bion:x:1:1
daen:x:2:2
adfm:x:3:4
laap:x:4:7
sync:x:5:9
shut:x:6:3
halt:x:7:5
mail:x:8:12
oper:x:11:21
[root@localhost ~]# sort -c passwd-sort
sort:passwd-sort:2:无序: bion:x:1:1
[root@localhost ~]# sort -t ":" -k 3 -n -c passwd-sort
[root@localhost ~]#

开始按照默认排序检查,显示第2行就是无序的。然后,使用 “:” 作为分隔符,选取第三行进行是否排序检查,没有输出,代表已经排好序。 

3.4 -o 参数

将sort的排序结果输出到指定文件,如下所示:

[root@localhost ~]# cat passwd-sort
root:x:0:0
bion:x:1:1
daen:x:2:2
adfm:x:3:4
laap:x:4:7
sync:x:5:9
shut:x:6:3
halt:x:7:5
mail:x:8:12
oper:x:11:21
[root@localhost ~]# sort -t ":" -k 3 passwd-sort -o passwd-sort-file
[root@localhost ~]# cat passwd-sort-file
root:x:0:0
bion:x:1:1
oper:x:11:21
daen:x:2:2
adfm:x:3:4
laap:x:4:7
sync:x:5:9
shut:x:6:3
halt:x:7:5
mail:x:8:12
[root@localhost ~]#

也可以使用 “>” 将 sort 排序结果输出到指定文件,如下所示:

[root@localhost ~]# cat passwd-sort
root:x:0:0
bion:x:1:1
daen:x:2:2
adfm:x:3:4
laap:x:4:7
sync:x:5:9
shut:x:6:3
halt:x:7:5
mail:x:8:12
oper:x:11:21
[root@localhost ~]# sort -t ":" -k 3 passwd-sort > passwd-sort-file1
[root@localhost ~]# cat passwd-sort-file1
root:x:0:0
bion:x:1:1
oper:x:11:21
daen:x:2:2
adfm:x:3:4
laap:x:4:7
sync:x:5:9
shut:x:6:3
halt:x:7:5
mail:x:8:12
[root@localhost ~]# cat passwd-sort
root:x:0:0
bion:x:1:1
daen:x:2:2
adfm:x:3:4
laap:x:4:7
sync:x:5:9
shut:x:6:3
halt:x:7:5
mail:x:8:12
oper:x:11:21
[root@localhost ~]#

sort 排序输出后,passwd-sort 文件内容没有变化,passwd-sort-file1 文件内容为排序后的内容。

注意:不能使用 “>” 将 sort 排序结果输出到原文件,如下所示:

[root@localhost ~]# cat passwd-sort
root:x:0:0
bion:x:1:1
daen:x:2:2
adfm:x:3:4
laap:x:4:7
sync:x:5:9
shut:x:6:3
halt:x:7:5
mail:x:8:12
oper:x:11:21
[root@localhost ~]# sort -t ":" -k 3 passwd-sort > passwd-sort
[root@localhost ~]# cat passwd-sort
[root@localhost ~]#

 通过 “>” 操作符重定向到原文件后,原文件内容为空。

四、总结

sort 在默认情况下使用 ASCII 码进行排序,如果按照数值排序需要添加参数 -n,经常使用的参数是 -t 和 -k 参数。如果不使用输出重定向,默认是不修改原文件内容的。

五、参考文献

[1] https://man7.org/linux/man-pages/man1/sort.1.html

猜你喜欢

转载自blog.csdn.net/u011074149/article/details/112387674