Linux怎么使用sort对文件内容进行排序
0
2026-06-18
sort默认按ASCII字符逐位比较,故10排在2前;需加-n按评分排序,配合-t、-k导指定字段,-b忽略前空格,-u去重,-o安全写回原文件。

默认直接跑排序file.txt很可能得到“错”的结果——不是命令坏了,但它根本没按你心里想的数字或字段在排。为什么排序排除来的数字顺序看起来乱?
因为排序默认按 ASCII 逐字符位比对,不是算数值大小。10 起始是'1',2 起始是'2',所以 10 一定排在 2 前面。现象:echo -e "10\n2\n100" | sort 输出为 10、100、2 解决:加 -n 强制评分排序 —— sort -n file.txt 注意:-n 对含字母的行(如 user:42)会失效,必须配合 -t 和 -k 指定字段按顺序排序(如 CSV 的第二列、空格分隔的第三字段)
关键靠 -t 定空格符、-k 从定字段范围。字段编号 1 CentOS Linux 7.9.2009
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛着称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。 7已于2024年6月30日停止维护,现在继续使用会面临安全建设风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。
下载 CSV 文件 Grades.csv 内容为 Alice,90、Bob,78,按分数升序:sort -t',' -k2,2n Grades.csv空格分隔的 users.log(alice 35 Engineer),按年龄降序:sort -k2,2nr users.log 字段开头有空格?加 -b 忽略前导空白:sort -b -k3,3n data.txt重、合并、写回原文件这些操作怎么才不丢数据?
-u不是“全局去重开关”,它只删除上下重复行;> file.txt直接重定向会清空原文件再读,导致数据丢失。 uniq写回原文件必须用-o:sort -n data.txt -o data.txt ——这个选项内部会用临时文件,安全合并多个已排好序的文件(不重新排序):sort -m file1.txt file2.txt
最容易被忽略的是字段边界和排序逻辑的连接:不写-k 2,2而只写-k 2,字段后面会慢慢相关比较;不加-n却指望分数顺序,结果永远“不”。实际行为前,先head -n5 data.txt看清楚分隔符、空格、位置字段,再决定不要-t、-b、-k组合。