2022-12-12 01:24:47
在Linux中,sort命令通过多参数组合实现灵活排序,常用参数包括-k、-t、-n、-r、-f、-u等,可满足按字段、数值、大小写、多条件等排序需求。
1. 按字段排序:-k参数详解默认情况下,sort按整行内容排序,但实际场景中常需按特定字段排序(如按成绩、年龄等)。此时需结合-k(指定字段)和-t(指定分隔符)参数。
语法格式:
sort -t'分隔符' -k起始字段,结束字段 排序方式 文件名-t:定义字段分隔符(如逗号、空格、制表符等)。
-k:指定排序字段范围,格式为起始字段,结束字段(若省略结束字段,则默认到行尾)。
排序方式:
n:按数值大小排序(默认按字符串字典序)。
r:逆序(降序)。
f:忽略大小写(可单独使用或与-k结合)。
示例:假设文件scores.csv内容如下:
张三,男,85李四,女,92王五,男,78按第三列(成绩)降序排列:
sort -t',' -k3nr scores.csv-t',':以逗号为分隔符。
-k3nr:从第3字段开始,按数值(n)逆序(r)排序。

注意:若字段含空格或特殊字符,需先清洗数据,否则可能导致排序错误。
处理包含大小写的字符串(如用户名、域名)时,可用-f参数忽略大小写差异,统一排序。
sort本身无去重功能,但可通过管道符|与uniq组合实现排序后去重,或直接使用sort -u在排序时去重。
方法1:sort + uniq组合
sort file.txt | uniq若需统计重复项次数,加-c参数:sort file.txt | uniq -c
方法2:sort -u(高效去重)对大文件推荐直接使用-u,避免二次处理:
sort -u file.txt需按多个字段排序时(如先按性别、再按年龄),可指定多个-k参数,每个参数定义一个排序条件。
示例:对文件data.csv(内容含性别、年龄字段)先按性别排序,再按年龄升序排列:
sort -t',' -k2,2 -k3n data.csv-k2,2:按第2字段(性别)排序。
-k3n:若性别相同,按第3字段(年龄)数值升序排序。

-n:按数值大小排序(默认按字符串字典序)。
echo -e "10n2n1" | sort # 默认输出:1 10 2echo -e "10n2n1" | sort -n # 数值排序输出:1 2 10-r:逆序(降序),常与-n或-k组合使用。
sort -nr file.txt # 按数值降序排列-o:将排序结果输出到原文件(覆盖写入)。
sort -o file.txt file.txt # 原地排序并覆盖原文件sort命令通过参数组合可高效处理文本排序需求:
掌握这些参数后,可快速完成日志分析、数据表处理等任务,显著提升效率。
