Linux常用命令学习笔记:sort

1. 命令概述

  • 命令名称sort(英文全拼:sort)
  • 核心功能对文本文件的行进行排序
  • 主要用途:数据排序、去重、合并、统计
  • 特点:支持多种排序方式、去重、合并、统计

2. 语法格式

sort [选项] [文件...]

3. 常用选项

选项说明
-b忽略每行前面的空格
-d按字典顺序排序
-f忽略大小写
-i只考虑可打印字符
-M按月份排序
-n按数值大小排序
-r反向排序
-u去重,只显示唯一的行
-t 字符指定字段分隔符
-k 字段按指定字段排序
-o 文件将结果输出到指定文件
-c检查文件是否已排序
-m合并已排序的文件
--help显示帮助信息
--version显示版本信息

4. 基本操作

(1) 基本排序

# 按字典顺序排序
sort file.txt

# 按数值大小排序
sort -n file.txt

# 反向排序
sort -r file.txt

# 忽略大小写排序
sort -f file.txt

# 去重排序
sort -u file.txt

(2) 指定字段排序

# 按第2个字段排序
sort -k 2 file.txt

# 按第2个字段数值排序
sort -n -k 2 file.txt

# 按第2个字段反向排序
sort -r -k 2 file.txt

# 按第2个字段去重排序
sort -u -k 2 file.txt

(3) 指定分隔符

# 按逗号分隔符排序
sort -t, file.csv

# 按冒号分隔符排序
sort -t: file.txt

# 按制表符分隔符排序
sort -t $'\t' file.txt

# 按空格分隔符排序(默认)
sort file.txt

(4) 复杂字段排序

# 按第2个字段数值排序,第1个字段字典排序
sort -k 2n -k 1 file.txt

# 按第2个字段数值反向排序,第1个字段字典排序
sort -k 2nr -k 1 file.txt

# 按第2个字段的第3到第5个字符排序
sort -k 2.3,2.5 file.txt

# 按第2个字段到行尾排序
sort -k 2 file.txt

# 按第2个字段到第4个字段排序
sort -k 2,4 file.txt

5. 常用实例详解

(1) 数值排序

# 按数值大小排序
sort -n numbers.txt

# 按数值大小反向排序
sort -nr numbers.txt

# 按第2列数值排序
sort -n -k 2 data.txt

# 按第2列数值反向排序
sort -nr -k 2 data.txt

# 按第2列数值排序,第1列字典排序
sort -n -k 2 -k 1 data.txt

(2) 去重排序

# 去重排序
sort -u file.txt

# 按第2列去重排序
sort -u -k 2 file.txt

# 按第2列数值去重排序
sort -n -u -k 2 file.txt

# 去重并统计出现次数
sort file.txt | uniq -c

# 去重并按出现次数排序
sort file.txt | uniq -c | sort -nr

(3) 合并排序

# 合并两个已排序的文件
sort -m file1.txt file2.txt

# 合并多个已排序的文件
sort -m file1.txt file2.txt file3.txt

# 合并并去重
sort -m -u file1.txt file2.txt

# 合并并按数值排序
sort -m -n file1.txt file2.txt

(4) 检查排序

# 检查文件是否已排序
sort -c file.txt

# 检查并按数值排序
sort -c -n file.txt

# 检查并按第2列排序
sort -c -k 2 file.txt

# 检查并按第2列数值排序
sort -c -n -k 2 file.txt

(5) 输出到文件

# 排序并输出到新文件
sort file.txt -o sorted.txt

# 排序并覆盖原文件
sort file.txt -o file.txt

# 排序并输出到多个文件
sort file1.txt file2.txt -o sorted.txt

# 排序并输出到标准输出
sort file.txt | tee sorted.txt

6. 实际应用场景

场景一:数据排序

# 排序用户列表
sort /etc/passwd

# 按用户名排序
sort -t: -k 1 /etc/passwd

# 按用户ID排序
sort -t: -n -k 3 /etc/passwd

# 按组ID排序
sort -t: -n -k 4 /etc/passwd

# 按登录shell排序
sort -t: -k 7 /etc/passwd

场景二:日志分析

# 按时间排序日志
sort access.log

# 按IP地址排序
sort -t ' ' -k 1 access.log

# 按状态码排序
sort -t ' ' -n -k 9 access.log

# 按响应时间排序
sort -t ' ' -n -k 10 access.log

# 按访问量排序
cut -d' ' -f1 access.log | sort | uniq -c | sort -nr

场景三:配置文件处理

# 排序配置文件
sort config.conf

# 按配置项排序
sort -t= config.conf

# 按配置值排序
sort -t= -k 2 config.conf

# 按配置值数值排序
sort -t= -n -k 2 config.conf

# 去重排序配置项
sort -u config.conf

场景四:代码统计

# 统计代码行数
wc -l *.py | sort -n

# 统计文件大小
ls -l *.py | sort -n -k 5

# 统计函数定义
grep 'def ' *.py | sort

# 统计import语句
grep 'import ' *.py | sort -u

# 统计TODO注释
grep 'TODO' *.py | sort

7. 与其他命令的区别

命令特点适用场景
sort对文本行进行排序数据排序、去重、合并
uniq去除重复行去重、统计
cut按列提取文本提取指定字段
awk文本处理工具复杂字段处理
sed流编辑器文本替换、删除

8. 注意事项

  1. 字段分隔符:默认使用空格分隔,使用 -t选项指定其他分隔符
  2. 字段编号:字段编号从1开始,使用 -k选项指定
  3. 数值排序:使用 -n选项按数值排序,否则按字典顺序
  4. 去重:使用 -u选项去重,或结合 uniq命令
  5. 输出控制:使用 -o选项输出到文件,或使用管道

9. 常见问题解决

(1) 字段分隔符问题

# 指定制表符分隔符
sort -t $'\t' file.txt

# 指定逗号分隔符
sort -t, file.csv

# 指定冒号分隔符
sort -t: file.txt

# 指定多个字符分隔符(需要预处理)
tr ':' ' ' < file.txt | sort

(2) 字段编号错误

# 检查字段编号
head -n 1 file.txt | tr ' ' '\n' | nl

# 指定正确的字段编号
sort -k 2 file.txt

# 指定字段范围
sort -k 2,4 file.txt

# 指定字段字符位置
sort -k 2.3,2.5 file.txt

(3) 数值排序问题

# 按数值排序
sort -n numbers.txt

# 按第2列数值排序
sort -n -k 2 data.txt

# 按第2列数值反向排序
sort -nr -k 2 data.txt

# 按第2列数值排序,第1列字典排序
sort -n -k 2 -k 1 data.txt

(4) 去重问题

# 去重排序
sort -u file.txt

# 按第2列去重排序
sort -u -k 2 file.txt

# 去重并统计出现次数
sort file.txt | uniq -c

# 去重并按出现次数排序
sort file.txt | uniq -c | sort -nr

# 去重并保存到文件
sort -u file.txt -o unique.txt

核心要点总结

  • sort用于对文本文件的行进行排序,支持多种排序方式
  • 常用选项-n(数值排序)、-r(反向排序)、-u(去重)、-k(指定字段)、-t(指定分隔符)
  • 排序类型:字典排序、数值排序、月份排序、反向排序
  • 实际应用:数据排序、日志分析、配置文件处理、代码统计
  • 注意事项:字段分隔符、字段编号、数值排序、去重处理

sort命令是Linux系统中最常用的文本处理工具之一,熟练掌握可以大大提高数据处理效率。


作 者:南烛
链 接:https://www.itnotes.top/archives/403
来 源:IT笔记
文章版权归作者所有,转载请注明出处!


上一篇
下一篇