当前位置:首页>Linux>Linux 中用于排序文本的强大命令:sort

Linux 中用于排序文本的强大命令:sort

  • 2026-10-11 07:52:36
Linux 中用于排序文本的强大命令:sort

sort命令用于对文本文件的行进行排序,它是文本处理和数据分析中最常用、最重要的命令之一。


命令功能

  • 排序行:对文本文件的每一行进行排序。

  • 去重:识别并删除重复的行。

  • 检查排序:验证文件是否已排序。

  • 合并文件:在排序的同时合并多个已排序的文件。


命令语法

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

  • 如果不指定文件,则从标准输入读取数据。

  • 可以指定多个文件,sort会将它们的内容连接起来一起排序。


常用选项

sort的选项非常丰富,以下是核心选项:

排序控制选项

选项

全称

说明

-r

--reverse

反向排序。降序排列(默认是升序)。

-f

--ignore-case

忽略大小写。排序时不区分大小写。

-n

--numeric-sort

按数值大小排序。而不是按字符串顺序(避免 "10" 排在 "2" 前面)。

-h

--human-numeric-sort

人类可读的数值排序。能正确排序如 "2K", "1M", "1G" 这样的带单位数值。

-R

--random-sort

随机排序。打乱行的顺序。

-V

--version-sort

版本号排序。能正确排序软件版本号如 "1.2", "1.10", "2.0"。

-M

--month-sort

按月份名称排序。识别 "JAN", "FEB" 等月份缩写。

字段处理选项

选项

全称

说明

-k

--key=KEYDEF

指定排序键。按指定的字段或字符位置排序,而不是整行。

-t

--field-separator=SEP

指定字段分隔符。默认是空白字符(空格、制表符)。

-b

--ignore-leading-blanks

忽略前导空白。排序时忽略行首的空格。

输出控制选项

选项

全称

说明

-u

--unique

去重。只输出唯一的行,删除重复项。

-c

--check

检查是否已排序。如果文件未排序,报告第一个乱序的位置。

-m

--merge

合并已排序的文件。将多个已排序的文件合并为一个排序文件。

-o

--output=FILE

输出到文件。将结果写入指定文件,而不是标准输出。

-s

--stable

稳定排序。保持相等记录的原始相对顺序。


常用示例

假设我们有一个文件 data.txt:

banana
Apple
orange
10
2
cherry
Banana

1. 基本排序(按字符串ASCII顺序)

sort data.txt

输出:

10
2
Apple
Banana
banana
cherry
orange

注意:数字被当作字符串排序,所以 "10" 在 "2" 前面。

2. 忽略大小写排序 (-f)

sort -f data.txt

输出:

10
2
Apple
banana
Banana
cherry
orange

"Apple", "banana", "Banana" 按忽略大小写的顺序排列。

3. 按数值大小排序 (-n)

sort -n data.txt

输出:

2
10
Apple
Banana
banana
cherry
orange

现在数字按数值大小正确排序了。

4. 反向排序 (-r)

sort -r data.txt

输出:

orange
cherry
banana
Banana
Apple
2
10

5. 去重排序 (-u)

sort -u data.txt

输出:

10
2
Apple
Banana
banana
cherry
orange

注意:-u是严格比较,Banana和 banana被视为不同。

6. 去重且忽略大小写

sort -f -u data.txt

输出:

10
2
Apple
banana
cherry
orange

现在 Banana被当作 banana的重复项删除了。

7. 检查文件是否已排序 (-c)

sort -c data.txt

输出:

sort: data.txt:2: disorder: Apple

报告第2行开始出现乱序。


高级用法:按字段排序

假设我们有一个带字段的文件 employees.txt:

Smith John 35000
Doe Jane 42000
Brown Bob 38000
Adams Alice 42000

8. 指定字段分隔符和排序键 (-t和 -k)

按第三列(薪资)数值降序排序:

sort -t ' ' -k 3nr employees.txt

输出:

Doe Jane 42000
Adams Alice 42000
Brown Bob 38000
Smith John 35000

-t ' '指定空格为分隔符,-k 3nr表示按第3字段数值降序排序。

按姓氏(第1字段)排序:

sort -t ' ' -k 1 employees.txt

输出:

Adams Alice 42000
Brown Bob 38000
Doe Jane 42000
Smith John 35000

9. 复杂键定义

按薪资降序,薪资相同的按姓氏升序:

sort -t ' ' -k 3nr -k 1 employees.txt

输出:

Adams Alice 42000
Doe Jane 42000
Brown Bob 38000
Smith John 35000

10. 按字符位置排序

假设文件 codes.txt:

ABC123
XYZ789
DEF456

按第4-6字符(数字部分)排序:

sort -k 1.4,1.6 codes.txt

输出:

ABC123
DEF456
XYZ789


实用场景示例

场景一:分析日志文件

找出访问量最大的IP地址:

# 假设日志格式: IP - - [date] "request" status size
cut -d' ' -f1 access.log | sort | uniq -c | sort -nr | head -10

1. 提取IP → 2. 排序 → 3. 计数去重 → 4. 按访问量降序 → 5. 显示前10

场景二:处理CSV数据

对CSV文件按第二列数值排序:

sort -t ',' -k 2n data.csv

场景三:整理单词列表

清理单词列表并排序:

# 转小写 → 排序 → 去重
cat words.txt | tr'A-Z''a-z' | sort -u > cleaned_words.txt

场景四:随机洗牌

打乱列表顺序(如抽奖名单):

sort -R participants.txt

场景五:版本号排序

正确排序软件版本:

cat versions.txt
# 1.2
# 1.10
# 1.1
# 2.0

sort -V versions.txt
# 输出:
# 1.1
# 1.2
# 1.10
# 2.0

场景六:检查配置文件重复项

找出配置文件中重复的配置行:

sort configfile | uniq -d


性能提示

  1. 内存使用:sort需要在内存中处理数据,非常大的文件可能消耗大量内存。

  2. 临时文件:当内存不足时,sort会使用临时文件。

  3. 并行排序:某些版本的 sort支持 --parallel选项来使用多个CPU核心。

  4. 缓冲区大小:可以使用 -S或 --buffer-size调整内存使用量。

总结来说,sort是:

  • 数据处理流水线中的关键组件

  • 日志分析的必备工具

  • 文本处理的强大武器

  • 系统管理的常用命令

掌握 sort及其选项的组合使用,能极大地提高你在命令行下处理数据的效率。

最新文章

随机文章