0

0

如何在Linux中排序文件内容?使用sort命令对文本行进行排序

星夢妙者

星夢妙者

发布时间:2025-08-30 10:30:01

|

403人浏览过

|

来源于php中文网

原创

sort命令可高效处理大文件,它会自动分块排序并合并,避免内存耗尽,结合-n、-r、-k、-t、-u、-o等选项可实现数字、逆序、字段、去重等精准排序。

如何在linux中排序文件内容?使用sort命令对文本行进行排序

在Linux中,想要对文件内容进行排序,

sort
命令无疑是你的首选工具。它能根据多种规则重新排列文本文件中的每一行,无论是简单的字母顺序,还是复杂的数字、日期甚至特定字段排序,都能轻松搞定。

sort
命令的基本用法其实非常直观。最简单的,你只需要告诉它要排序哪个文件:

sort your_file.txt

这会默认按照字母顺序(ASCII值)对

your_file.txt
中的每一行进行升序排列,然后把结果输出到标准输出(也就是你的终端屏幕)。如果想把结果保存到新文件,通常我们会用重定向:

sort your_file.txt > sorted_your_file.txt

或者,

sort
命令本身也提供了
-o
选项来指定输出文件,这在某些场景下更清晰:

sort your_file.txt -o sorted_your_file.txt

当然,

sort
的强大远不止于此。它有一系列选项可以让你精细控制排序行为。比如,如果你想反向排序(降序),加上
-r
就行:

sort -r your_file.txt

处理数字时,默认的字母排序可能会出问题(比如 "10" 会排在 "2" 前面),这时就需要

-n
选项进行数值排序:

sort -n numbers.txt

如果文件里有重复行,而你只想要唯一的行,

-u
选项就能派上用场:

sort -u your_file.txt

这些是

sort
最常用的一些“基础款”功能,但它们已经能解决日常工作中大部分的排序需求了。

如何按数字顺序或逆序排列数据?

这真的是一个非常常见的需求,我个人觉得,当你第一次发现

sort
默认的排序方式对数字不起作用时,那种“啊哈!”的感觉特别强烈。比如,你有一个文件
scores.txt

100
5
20
1

直接

sort scores.txt
的结果会是:

1
100
20
5

这显然不是我们想要的数字顺序。这时,

-n
选项就成了救星。

sort -n scores.txt
输出:

1
5
20
100

这就对了!它会把每一行内容当作一个数字来比较,而不是字符串。

如果你想按数字降序排列,只需要把

-n
-r
结合起来用。顺序无所谓,
sort
会理解的:

sort -nr scores.txt
或者
sort -rn scores.txt
输出:

100
20
5
1

这种组合用法在处理日志文件或者统计数据时尤其方便,能让你迅速找出最大值或最小值。

如何根据文件中的特定列进行排序?

想象一下,你有一个CSV文件或者其他结构化的数据文件,比如

users.csv

Alice,30,New York
Bob,25,London
Charlie,35,Paris
David,30,Berlin

你可能想按年龄(第二列)排序,或者按城市(第三列)排序。这时,

sort
-k
(key) 选项就派上大用场了。

首先,我们需要告诉

sort
你的列是用什么分隔的。CSV文件通常用逗号
,
分隔,所以我们会用
-t
选项来指定分隔符:

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

这里:

Shell脚本编写基础 中文WORD版
Shell脚本编写基础 中文WORD版

Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统

下载
  • -t','
    告诉
    sort
    逗号是字段分隔符。
  • -k 2n
    表示我们想根据第二个字段(年龄)进行数值 (
    n
    ) 排序。

输出会是:

Bob,25,London
Alice,30,New York
David,30,Berlin
Charlie,35,Paris

注意到 Alice 和 David 的年龄都是 30,它们之间的顺序可能取决于原始文件中谁先出现,或者

sort
内部的稳定排序机制。

如果你想按城市(第三列)排序,并且是字母顺序,可以这样:

sort -t',' -k 3 users.csv
输出:

David,30,Berlin
Bob,25,London
Alice,30,New York
Charlie,35,Paris

当多个字段需要协同排序时,你可以指定多个

-k
选项,
sort
会按照它们出现的顺序依次进行比较。比如,先按年龄升序,年龄相同再按城市字母顺序升序:

sort -t',' -k 2n -k 3 users.csv
输出:

Bob,25,London
David,30,Berlin
Alice,30,New York
Charlie,35,Paris

这真的非常灵活,让

sort
能够处理各种复杂的数据排序场景。

如何处理重复行或将排序结果保存到新文件?

在数据清洗和分析过程中,处理重复行是一个很常见的任务。你可能只想看到唯一的条目,而

sort
-u
(unique) 选项就能帮你完成这个。

假设你有一个

log.txt
文件,里面有一些重复的日志行:

ERROR: Disk full
INFO: Service started
WARNING: Low memory
ERROR: Disk full
INFO: Service started

如果你只想看所有不同的日志信息,可以这样:

sort -u log.txt
输出:

ERROR: Disk full
INFO: Service started
WARNING: Low memory

这个选项非常实用,因为它不仅去除了重复行,还在去重之前先对文件内容进行了排序,确保了输出的整洁和可读性。

至于将排序结果保存到新文件,前面也提到了两种方法:

  1. 使用 shell 的重定向
    >
    sort your_file.txt > sorted_output.txt
    这种方式很通用,适用于任何命令的输出。
  2. 使用
    sort
    命令自带的
    -o
    选项:
    sort -o sorted_output.txt your_file.txt
    我个人更倾向于使用
    -o
    ,因为它更明确地表达了“将排序结果写入这个文件”的意图,而且在某些复杂的管道操作中,
    sort -o
    可以避免一些潜在的陷阱(比如你正在排序的文件和输出文件是同一个,
    sort
    会聪明地处理,而简单的
    >
    重定向可能会导致文件被清空)。

举个例子,如果你想对一个文件排序并去除重复行,然后把最终结果保存到一个新文件,可以这样:

sort -u -o unique_sorted_data.txt raw_data.txt

这行命令一气呵成,既排序又去重,最后还把结果安全地保存下来,效率很高。

排序时如何忽略大小写或处理月份名称?

在处理文本数据时,大小写敏感性常常是个让人头疼的问题。比如,

Apple
Apple
在默认排序下是不同的,这可能不是你想要的。
sort
提供了
-f
(fold case) 选项来解决这个问题。它会将小写字母视为其对应的大写字母进行比较。

假设有文件

items.txt

Banana
apple
Orange
Apple

sort items.txt
的结果可能是:

Apple
Banana
Orange
apple

因为大写字母的ASCII值通常小于小写字母。但如果你想让

Apple
Apple
视为同一种水果,并排在一起,那么:

sort -f items.txt
输出:

apple
Apple
Banana
Orange

这样看起来就更符合我们对“忽略大小写”的直观理解了。

另一个比较特殊的场景是处理包含月份名称的日志或数据。比如

log_dates.txt

Dec 25
Apr 10
Jan 1
Mar 15

如果直接

sort log_dates.txt
,它会按字母顺序排:

Apr 10
Dec 25
Jan 1
Mar 15

这显然不是按时间顺序。

sort
命令有一个非常贴心的选项
-M
(month sort),专门用于识别并按月份的正确顺序进行排序:

sort -M log_dates.txt
输出:

Jan 1
Mar 15
Apr 10
Dec 25

这对于处理一些非标准日期格式的日志文件时,简直是神器。它能省去你写复杂脚本去解析日期的麻烦。

这些小而美的选项,虽然不总是被用到,但在特定场景下,它们能极大地提升你的工作效率,避免一些不必要的编程。

sort
命令的设计哲学,在我看来,就是用最简洁的方式解决最常见的文本处理痛点。

遇到大型文件时,
sort
命令的性能如何?

当我第一次需要处理一个几十GB甚至上百GB的日志文件时,我本能地担心

sort
这样的命令行工具会不会直接把我的内存耗尽。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

409

2023.09.04

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1566

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

649

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1228

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1184

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

192

2025.07.29

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.5万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号