跳转到内容

sort

sort 是 Linux 中的基本实用程序,用于按升序或降序排列文件或标准输入的内容,逐行操作,并提供丰富的自定义选项。

Terminal window
sort [选项] [文件...]

如果不指定文件,sort 会从标准输入读取数据 sort 默认按字典序升序排序

选项 说明
-n 按数值大小排序(numeric),不带 -n 会按照字典序排序,即逐字符比较 Unicode/ASCII 编码值
-r 反向排序(reverse),sort 默认升序排序,带上 -r 会降序排序
-u 去重(unique),输出排序后的内容,同时移除重复行(相当于 `sort
-k<列范围> 按指定列排序(key),适用于多列的文本(默认以空格或制表符分隔)
-t<分隔符> 指定分隔符(delimiter),对于多列的文本,默认分隔符是空格或制表符,但可以用 -t 自定义
-o <filename> 输出到文件(output),将排序结果直接写入文件
-T <dir> 指定临时文件的存储目录。当排序数据量超出内存限制时,sort 会将中间结果写入临时文件进行归并排序。默认写入 /tmp,可用此选项指定其他目录(如更大或更快的磁盘)

示例数据:

-- number.txt --
5
12
100
1
-- data.txt --
Alice 30
Bob 25
Carol 28
-- score.csv --
Music,97
English,98
Math,100

1. 按数值排序

Terminal window
sort -n number.txt

不加 -n 则按照字典序排序,结果是 1 100 12 5 加 -n 后按照数值排序,结果是 1 5 12 100

2. 按指定列排序

Terminal window
sort -k2,2 -n data.txt

按照第 2 列排序(起始列是 2,结束列也是 2) 如果写成 -k2,默认是从第 2 列开始一直到行尾,这在某些情况下排序会不准确

3. 指定分隔符分割列

Terminal window
sort -t, -k2 -n score.csv

CSV 文件使用逗号分割列,可以用 -t 指定 ,

4. 指定临时文件存储中间结果

Terminal window
sort -T /mnt/fastdisk largefile.txt -o sorted.txt

临时文件将写到 /mnt/fastdisk/ 目录 输入文件是 largefile.txt 排序结果输出到 sorted.txt