当前位置:首页>Linux>掌握sort和uniq,玩转 Linux 下的数据排序与统计

掌握sort和uniq,玩转 Linux 下的数据排序与统计

  • 2026-10-11 08:22:46
掌握sort和uniq,玩转 Linux 下的数据排序与统计

sort 和 uniq 命令这两个工具组合在一起,能将杂乱无章的日志文件转化为清晰可读的分析统计,帮你快速发现问题的核心。

📊 核心机制

要理解它们的强大之处,关键在于掌握以下几点:

  • 核心管道模式:基本用法是 sort 文件名 | uniq -c。sort 命令先对所有行进行排序,让相同的行聚集在一起;然后 uniq -c 命令统计这些相邻重复行的数量。
  • 关键前提:uniq只能处理相邻的重复行,因此必须先使用 sort 排序,否则 uniq 无法有效去重。
  • 常用排序组合:命令链的末尾通常会加上 sort -rn,对 uniq -c 生成计数进行数值降序排列,快速定位高频问题。

⚙️ 常用选项速查

下面是 sort 和 uniq 最实用的一些选项:

  • sort 命令
    • -n: 按数值排序,确保数字排序正确 (如 9, 10, 11)。
    • -r: 反向排序,从大到小或从 Z 到 A。
    • -u: 在排序的同时去除重复行,等同于 sort | uniq。
    • -k: 按指定列排序,例如 sort -k2 按第二列排序。
  • uniq 命令
    • -c: 在每行前加上该行出现的次数,是统计的核心。
    • -d: 只输出重复出现的行,用于查找异常。
    • -u: 只输出不重复(唯一)的行。
    • -i: 比较时忽略大小写。

🔧 典型应用场景

  • 分析 SSH 暴力破解:从安全日志 /var/log/auth.log 中找出尝试登录失败最多的 IP。

    grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn
  • 统计 Web 服务状态:快速汇总 Nginx 访问日志 /var/log/nginx/access.log 中的 HTTP 状态码(如 200、404、500),以评估服务健康状况。

    awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn
  • 审计高频命令:分析你的 ~/.bash_history 文件,看看自己最常用的命令是哪些。

    history | awk '{print $2}' | sort | uniq -c | sort -rn
  • 移除文件重复行:快速、简单地清理文本文件中的重复行。

    sort -u 输入文件 > 输出文件
  • 定位异常模式:在日志中找出完全相同的、重复出现的请求或记录,常用来发现爬虫或异常流量。

    sort 日志文件 | uniq -d

💡 最佳实践与建议

  • 从单个管道开始验证:构建复杂命令时,建议从第一个管道 grep 或 awk 开始,确认输出正确后再逐步添加后续管道,这能快速定位问题。

  • 养成事后检查习惯:使用 -c 统计时,所有行的计数之和应等于原始文件的总行数,你可以用 wc -l 命令来验证,确保统计无误。

  • 进阶:处理超大文件:如果你的日志文件非常大(例如 GB 级别),可以先使用 split 命令分块处理,或者用临时文件保存中间结果以提升处理效率。

  • 进阶:多维排序:如果需要在按计数排序的同时,对相同计数的条目进行字母排序,可以解锁更精细的分析维度。

    ... | sort -t' ' -k1,1rn -k2

    参数解释:-t' ' 指定以空格作为列分隔符;-k1,1rn 指定以第一列为排序依据,rn 表示数值降序;-k2 指定当第一列相同时,按第二列字母顺序排序,以此类推。

最新文章

随机文章