sort命令

Linux 中的 sort 命令用于对文本文件或命令输出的行进行排序。它可以根据字母顺序、数字顺序、逆序、指定列等多种方式排序,非常灵活。

1. 基本语法

sort [OPTION]... [FILE]...
  • OPTION:指定排序的选项,如数字排序、逆序等。
  • FILE:需要排序的文件。如果不指定文件,sort 会从标准输入读取数据。

2. 常用选项

  • -n:按数值大小排序(数字排序)。
  • -r:逆序排序(降序)。
  • -k:按指定列排序。
  • -t:指定字段分隔符(默认为空格)。
  • -u:去除重复行。
  • -o:将排序后的结果写入指定文件,代替原文件。
  • -f:忽略大小写。
  • -b:忽略前导空格。
  • -M:按月份名称排序(如 Jan, Feb, Mar 等)。

3. 示例

3.1. 按字母顺序排序

sort file.txt

这会对 file.txt 中的行按字母顺序进行排序。

示例输入 (file.txt)

banana
apple
grape
cherry

输出

apple
banana
cherry
grape

3.2. 按数值排序

sort -n numbers.txt

示例输入 (numbers.txt)

10
5
30
2

输出

2
5
10
30

3.3. 逆序排序

sort -r file.txt

这会按字母的逆序排序。

示例输出

grape
cherry
banana
apple

3.4. 按列排序

可以使用 -k 选项指定按哪一列进行排序。假设有一个带有两列数据的文件,我们希望按第二列排序。

示例文件 (data.txt)

John 25
Alice 30
Bob 22
Eve 28

按第二列(年龄)排序:

sort -k 2 -n data.txt

输出

Bob 22
John 25
Eve 28
Alice 30

3.5. 指定分隔符进行排序

假设文件以逗号分隔,可以使用 -t 选项指定分隔符。

示例文件 (comma.txt)

John,25
Alice,30
Bob,22
Eve,28

按年龄(第二列)排序:

sort -t ',' -k 2 -n comma.txt

输出

Bob,22
John,25
Eve,28
Alice,30

3.6. 去除重复行

使用 -u 选项可以删除重复的行。

sort -u file.txt

示例输入 (file.txt)

apple
banana
apple
grape

输出

apple
banana
grape

3.7. 将排序结果保存到文件

使用 -o 选项可以将排序后的结果保存到指定文件中。

sort file.txt -o sorted.txt

这会将 file.txt 的排序结果保存到 sorted.txt 中。

3.8. 按月份名称排序

假设文件中有月份名称,可以使用 -M 选项按月份顺序排序。

示例文件 (months.txt)

March
January
February
April

按月份排序:

sort -M months.txt

输出

January
February
March
April

3.9. 忽略大小写排序

sort -f file.txt

示例输入 (file.txt)

banana
Apple
grape
cherry

输出

Apple
banana
cherry
grape

4. 组合使用

可以组合多个选项,例如按数值排序并逆序:

sort -n -r numbers.txt