1. sort命令基础:理解排序的本质
在Linux系统中,sort命令是文本处理三剑客(grep、awk、sort)中最容易被低估的工具。我第一次接触sort时以为它只是个简单的排序工具,直到有次需要处理百万行的日志文件时才真正理解它的威力。sort不仅能对文本行进行排序,还能处理复杂的数据格式、去重、合并文件,甚至进行简单的统计计算。
sort的核心工作原理是基于行的字典序比较。它会读取输入文件的每一行(默认以换行符分隔),然后根据指定的规则进行比较排序。与常见编程语言中的排序函数不同,sort是专门为处理大规模文本文件优化的,它采用外部排序算法,能够高效处理远大于内存的文件。
注意:sort默认使用当前locale的排序规则(如en_US.UTF-8),这会影响特殊字符和大小写的排序结果。要确保稳定排序,建议设置LC_ALL=C。
基本语法格式:
bash复制sort [选项] [文件]
最基础的用法是对文件内容按行排序:
bash复制# 对file.txt按行排序并输出
sort file.txt
# 直接排序并覆盖原文件
sort -o file.txt file.txt
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 实用排序技巧:超越基础用法
2.1 按数字排序与反向输出
处理包含数字的数据时,单纯的字典排序会导致"10"排在"2"前面。这时需要-n选项:
bash复制# 按数值大小排序(适用于第一列为数字的情况)
sort -n data.txt
# 逆序排列(可与其他排序选项组合)
sort -nr data.txt
我曾经处理过一个服务器负载日志,需要找出负载最高的时段。通过组合使用:
bash复制awk '{print $1}' access.log | sort -nr | head -10
快速定位了Top 10高负载时间点。
2.2 多字段复杂排序
对于包含多列的数据(如CSV),可以使用-k指定排序键:
bash复制# 按第2列数字排序,然后按第1列字母排序
sort -k2n -k1 data.csv
字段排序的完整语法是-k POS1[,POS2],其中POS的格式为F[.C][OPTS],F是字段号,C是字符位置,OPTS是排序选项(如n、r)。
