0%

没有规矩不成方圆 sort

没有规矩不成方圆 sort

Linux sort 命令用于将文本内容进行排序。

官方定义为:

sort - sort lines of text files

语法

1
2
$ sort [OPTION]... [FILE]...
$ sort [OPTION]... --files0-from=F

常用的参数为

  • -c 检查文件是否已经按照顺序排序。
  • -u 意味着是唯一的(unique),输出的结果是去完重了的。
  • -r 以相反的顺序来排序。
  • -k field1[,field2] 按指定的列进行排序。

这里假定测试文件名为testfile

1
2
3
4
5
6
7
LiSi            80

ZhangSan 70

WangWu 90

MaLiu 88

默认无参数

在使用 sort 命令以默认的式对文件的行进行排序,命令如下:

1
2
3
4
5
6
7
8
$ sort testfile 



LiSi 80
MaLiu 88
WangWu 90
ZhangSan 70

sort 命令默认情况下将第一列以 ASCII 码的次序排列,并将结果输出到标准输出。

根据第N列排序

对于测试文件而言,或许我们更希望使用数字来统计排序,此时可以使用-k N参数,其中N为列数

1
2
3
4
5
6
7
8
$  sort testfile -k 2



ZhangSan 70
LiSi 80
MaLiu 88
WangWu 90

指定分隔符,进行排列

此时默认的分隔符为空格,如果是其他分隔符,比如分毫

检查是否已经排序

在某些情况下,或许只想看看文件是否已经排序,使用-c参数 :

1
2
$  sort -c testfile
sort: testfile:2: disorder

如果没有排序会有输出,而排序的话就没有输出。

逆序排列

如果希望看一下数字从高到低的培训,使用-r参数:

1
2
3
4
5
$  sort testfile -k 2  -r
WangWu 90
MaLiu 88
LiSi 80
ZhangSan 70

对一个使用冒号分隔的文件的第二项进行排序

$ sort -t: -k 2 names.txt

对使用tab分隔的第三项进行排序**(department_id),**并去掉重复项

$ sort -t: -u -k 3 names.txt

passwd文件的第三项进行排序**(userid)**

$ sort -t: -k 3n /etc/passwd | more

基于ip地址对**/etc/hosts**文件排序

$ sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n /etc/hosts

与其它命令组合在一起使用

ps –ef | sort : 对进程列表进行排序

ls -al | sort +4n : 使用升序对ls -al的输出以文件大小进行排序(第5项)

ls -al | sort +4nr : 使用降序对ls -al的输出以文件大小进行排序(第5项)

处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道