sort 是一条按顺序排列文件中数据的 Unix 命令。

Option Meaning
-u Make each lines of output unique

Section 18.1: sort 命令的输出

sort 命令用于根据行内容进行排序。

从文件中输入

sort file.txt

从命令中输入

你可以对任何输出命令进行排序。在本例中,文件列表遵循指定的模式。

find * -name pattern | sort

Section 18.2: 合并输出中相同内容

如果输出的每一行都需要将相同内容合并为一行,可添加 -u 选项。

显示文件夹中文件的所有者

ls -l | awk '{print $3}' | sort -u

Section 18.3: 数值排序

假设我们有这样一个文件

test>>cat file
10.Gryffindor
4.Hogwarts
2.Harry
3.Dumbledore
1.The sorting hat

要对该文件进行数字排序,请使用带 -n 选项的排序:

test>>sort -n file

文件排序的输出如下:

1.The sorting hat
2.Harry
3.Dumbledore
4.Hogwarts
10.Gryffindor

倒序排序: 要倒序排序,请使用 -r 选项

要颠倒上述文件的排序顺序,请使用

sort -rn file

文件排序的输出如下:

10.Gryffindor
4.Hogwarts
3.Dumbledore
2.Harry
1.The sorting hat

Section 18.4: 按键值排序

假设我们有这样一个文件

test >> cat Hogwarts
  Harry             Malfoy      Rowena      Helga
  Gryffindor    Slytherin Ravenclaw Hufflepuff
  Hermione      Goyle       Lockhart    Tonks
  Ron               Snape       Olivander Newt
  Ron               Goyle       Flitwick    Sprout

要以列为键对文件进行排序,请使用 -k 选项:

test>>sort -k 2 Hogwarts

这将以第 2 列为关键字对文件进行排序:

Ron Goyle Flitwick Sprout
Hermione Goyle Lockhart Tonks
Harry Malfoy Rowena Helga
Gryffindor Slytherin Ravenclaw Hufflepuff
Ron Snape Olivander Newt

现在,如果我们要使用次关键字和主关键字对文件进行排序,请使用

sort -k 2,2 -k 1,1 Hogwarts

这将首先以列 2 作为主键对文件进行排序,然后以列 1 作为次键对文件进行排序:

Hermione Goyle Lockhart Tonks
Ron Goyle Flitwick Sprout
Harry Malfoy Rowena Helga
Gryffindor Slytherin Ravenclaw Hufflepuff
Ron Snape Olivander Newt

如果我们需要对一个有多个键的文件进行排序,那么对于每个 -k 选项,我们都需要指定排序的结束位置。因此,"-k1,1" 表示在第一列开始排序,在第一列结束排序。

-t 选项

在前面的例子中,文件的默认分隔符是制表符。如果要对非默认分隔符的文件进行排序,我们需要使用 -t 选项来指定分隔符。假设文件如下

test >> cat file
5.|Gryffindor
4.|Hogwarts
2.|Harry
3.|Dumbledore
1.|The sorting hat

要根据第二列对文件进行排序,请使用

test>>sort -t "|" -k 2 file

这将对文件进行如下排序:

3.|Dumbledore
5.|Gryffindor
2.|Harry
4.|Hogwarts
1.|The sorting hat