wc 和 sort 是 Linux 中轻量高效的内容统计与排序工具,wc 统计行数、单词数、字节数及最长行长度,sort 支持数值、逆序、多列、去重及自定义分隔符排序,二者配合管道可完成日志分析、高频词提取等任务。

wc 和 sort 是 Linux 中最常用、最轻量的内容统计与排序工具。它们不依赖额外安装,配合管道使用,能快速完成日志分析、代码行数统计、高频词提取等任务。
用 wc 快速统计文件基础信息
wc 默认输出三列:行数、单词数、字节数。常用选项有:
- -l:仅统计行数(适合查日志条目、配置项数量)
- -w:仅统计单词数(按空白符分隔,可用于粗略估算文本量)
- -c:仅统计字节数(比 du 更精准,不含元数据)
- -L:显示最长一行的字符数(排查超长日志或格式异常)
例如:wc -l /var/log/syslog 查看系统日志总行数;wc -L *.py 找出所有 Python 文件中最长的一行。
用 sort 对文本内容做多维排序
sort 默认按 ASCII 码升序排列,但实际中常需控制排序逻辑:
- -n:按数值大小排序(避免 10 排在 2 前面)
-
-r:逆序(降序),常与 -n 联用,如
sort -nr -
-k:指定按第几列排序(如
sort -k3,3n表示只按第 3 列数值排序) -
-u:去重(配合
sort | uniq更推荐用sort -u,效率更高) -
-t:指定字段分隔符(如
sort -t: -k3,3n /etc/passwd按 UID 数值排序用户)
wc + sort 组合实战:找日志里访问最多的 IP
假设 Nginx 日志格式为:192.168.1.100 - - [10/Jan/2024:08:30:12] "GET /index.html"
- 提取第一列 IP:
awk '{print $1}' access.log - 统计各 IP 出现次数:
awk '{print $1}' access.log | sort | uniq -c - 按次数倒序排列:
awk '{print $1}' access.log | sort | uniq -c | sort -nr - 取前 5 名:
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -5
这个流程本质是:切分 → 归类 → 计数 → 排序 → 截取。wc 不直接参与计数,但可辅助验证,比如 wc -l access.log 看总请求数,再和 uniq -c | wc -l 对比,判断是否有大量单一 IP 请求。
小技巧:处理空行、空白符干扰
真实数据常含空行或首尾空格,影响统计结果:
- 过滤空行:
grep -v '^$'或awk 'NF' - 去掉每行首尾空格:
awk '{$1=$1};1'(利用赋值触发重格式化) - 统计非空行数:
grep -v '^$' file.txt | wc -l - 查看某列是否全数字(防 -n 排序出错):
awk '{print $3}' data.txt | grep -v '^[0-9]\+$'
不复杂但容易忽略。










