Linux sort命令用于对文本文件的行进行排序,支持多种排序规则和选项,是数据处理和文本处理中不可或缺的工具。
sort [选项] [文件...]
| 选项 | 说明 |
|---|---|
-b |
忽略行首空白字符 |
-d |
只考虑字母、数字和空格 |
-f |
忽略大小写 |
-g |
按通用数值排序 |
-i |
只考虑可打印字符 |
-M |
按月份排序(JAN, FEB, ...) |
-n |
按数值大小排序 |
-r |
反向排序 |
-u |
去重,只输出唯一的行 |
-k |
指定排序的列 |
-t |
指定字段分隔符 |
-o |
将结果输出到指定文件 |
-m |
合并已排序的文件 |
-c |
检查文件是否已排序 |
-s |
稳定排序,保持相等记录的相对顺序 |
# 对文件按字典序排序
sort file.txt
# 对多个文件进行排序
sort file1.txt file2.txt
# 从标准输入读取数据并排序
echo -e "banana\napple\ncherry" | sort
# 创建测试文件
echo -e "10\n2\n25\n100\n5" > numbers.txt
# 按数值大小排序(而不是字典序)
sort -n numbers.txt
# 输出:
# 2
# 5
# 10
# 25
# 100
# 反向排序(Z-A)
sort -r file.txt
# 数值反向排序(从大到小)
sort -nr numbers.txt
# 输出:
# 100
# 25
# 10
# 5
# 2
# 创建有重复数据的文件
echo -e "apple\nbanana\napple\ncherry\nbanana" > fruits.txt
# 排序并去重
sort -u fruits.txt
# 输出:
# apple
# banana
# cherry
# 创建以空格分隔的数据文件
echo -e "John 25 50000\nAlice 30 60000\nBob 22 45000" > data.txt
# 按第2列(年龄)数值排序
sort -k2 -n data.txt
# 按第3列(工资)反向数值排序
sort -k3 -nr data.txt
# 使用冒号分隔符,按第3列排序
echo -e "user1:100:500\nuser2:101:300\nuser3:102:400" | sort -t: -k3 -n
# 创建包含月份的文件
echo -e "FEB\nJAN\nMAR\nDEC\nAPR" > months.txt
# 按月份顺序排序
sort -M months.txt
# 输出:
# JAN
# FEB
# MAR
# APR
# DEC
# 按多个字段排序(先按第2列,再按第1列)
echo -e "Bob 25\nAlice 30\nCharlie 25\nDavid 30" | sort -k2,2n -k1,1
# 按特定字符位置排序(第3-5个字符)
echo -e "abc123\nxyz789\ndef456" | sort -k1.3,1.5
# 将排序结果保存到新文件
sort file.txt -o sorted_file.txt
# 检查文件是否已排序
sort -c file.txt
# 如果文件已排序,无输出;如果未排序,显示错误信息
# 合并多个已排序的文件
sort -m sorted1.txt sorted2.txt sorted3.txt
# 对日志文件按时间排序
sort -k1,2 access.log
# 统计单词频率并排序
echo "apple banana apple cherry banana apple" | tr ' ' '\n' | sort | uniq -c | sort -nr
# 处理CSV文件
sort -t, -k2,2n data.csv
# 系统进程按内存使用排序
ps aux --sort=-%mem | head -10
# 查找最大的文件
ls -l | sort -k5 -nr | head -10
# 使用LC_ALL设置区域设置进行排序
LC_ALL=C sort file.txt # 按字节值排序
LC_ALL=en_US.UTF-8 sort file.txt # 按本地化规则排序
# 忽略标点符号,只考虑字母数字
sort -d file_with_punctuation.txt
# 忽略不可打印字符
sort -i file_with_special_chars.txt
# 保持相等记录的原始顺序
sort -s -k2,2n data.txt
-n选项进行数值排序时,非数字行会被当作0处理-k选项的格式为-k POS1[,POS2],POS格式为F[.C][OPTS]-t指定分隔符时,如果分隔符是特殊字符,可能需要转义/tmp目录有足够空间sort | uniq -c - 统计频率sort | head/tail - 获取前/后N行sort | tee - 同时输出到屏幕和文件ls -l | sort - 对ls输出排序ps aux --sort - 对进程列表排序find | sort - 对find结果排序-S SIZE指定缓冲区大小--parallel=N启用多线程排序-c检查避免重复排序-T DIR指定临时文件目录-m而不是重新排序--compress-program压缩临时文件uniq - 报告或忽略重复行awk - 文本处理和分析工具cut - 列提取工具join - 基于共同字段连接两个文件comm - 比较两个已排序文件shuf - 随机打乱文件行