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,作者:Linux猿,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/nyist_zxp/article/details/112387674
- 点赞
- 收藏
- 关注作者
评论(0)