介绍

sort命令在Linux里非常有用,它将文本文件内容进行排序,并将排序结果标准输出或重定向输出到指定文件。

语法

1
sort (options) 参数
选项 说明
-n number,依照数值的大小排序
-r reverse, 以相反的顺序来排序
-t 分隔字符 设置排序时所用的分隔字符, 默认空格是分隔符
-k 指定需要排序的列
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符
-f 排序时,将小写字母视为大写字母
-b 忽略每行前面开始出的空格字符
-o 输出文件 将排序后的结果存入指定的文件
-u 意味着是唯一的(unique),输出的结果是去完重了的
-m 将几个排序好的文件进行合并

参数:指定待排序的文本文件

演示

数据文件准备:sort.txt

1
2
3
4
5
6
7
张三 30  
李四 95
播仔 85
播仔 85
播仔 86
AA 85
播妞 100

1.数字升序

按照空格分割后的第2列数字升序排序:

1
2
3
sort -t " " -k2n,2 sort.txt
# -t " " 代表使用空格分隔符拆分列
# -k 2n,2 代表根据从第2列开始到第2列结束进行数字升序, 仅对第2列排序

运行效果

2. 数字升序去重

先按照“空格分割,然后按照第2列数字升序排序,最后对所有列去重:

1
sort -t " " -k2n,2 -uk1,2 sort.txt

运行效果

注意: 先排序再去重

3.数字升序去重结果保存到文件

1
sort -t " " -k2n,2 -uk1,2 -o sort2.txt sort.txt

运行效果

4.数字降序去重

先按照空格分割, 然后按照第2列数字降序排序,最后对所有列去重:

1
sort -t " " -k2nr,2 -uk1,2 sort.txt

运行效果

5.多列排序

数据文件准备:sort3.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
公司A,部门A,3
公司A,部门B,0
公司A,部门C,10
公司A,部门D,9
公司B,部门A,30
公司B,部门B,40
公司B,部门C,43
公司B,部门D,1
公司C,部门A,30
公司C,部门B,9
公司C,部门C,100
公司C,部门D,80
公司C,部门E,60

以”,”分割先对第一列字符串升序,再对第3列数字降序:

1
sort -t "," -k1,1 -k3nr,3 sort3.txt

运行效果