wc 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
wc(word count,字数统计)——文本处理命令族(见文本处理命令族)。管道里"数一下有多少行"几乎都靠它。
wc 统计输入的行数、词数、字节数(默认三项都给)。虽然名字叫 word count,但日常 90% 的用法是 wc -l——数行数。它常坐在管道末尾,回答"匹配了多少行""文件多少行"。
一、基本统计
wc file # 输出:行数 词数 字节数 文件名
wc -l file # 只数行数(最常用)
wc -w file # 词数(按空白分隔)
wc -c file # 字节数
wc -m file # 字符数(多字节如中文会 > 字节数)
wc -L file # 最长一行的长度默认
wc给"行/词/字节"三数。-l数行是绝对主力——"日志有多少条 error""文件多少行"都它上。-c(字节) 与-m(字符) 区别:ASCII 下相等,含中文时字符数 < 字节数(UTF-8 一个汉字 3 字节)。-L看最长行,排查"某行异常长导致解析问题"有用。
二、管道里数匹配行
grep -c "error" app.log # grep 自带计数
grep "error" app.log | wc -l # 等价写法,更通用
ps aux | grep nginx | grep -v grep | wc -l # 数有几个 nginx 进程
grep -c能直接数匹配行,但很多场景匹配结果还要再过一道管道,这时... | wc -l是通用数行法。注意grep "pattern" | wc -l数的是"匹配的行数",若一行里有多处匹配仍算 1 行——要数"匹配次数"得用grep -o pattern | wc -l(见 grep 的-o)。
三、统计多个文件
wc -l *.log # 每个文件分别统计 + 末尾合计(total)
wc -l file1 file2 # 同样会给出 total 行多个文件时 wc 会在最后加一行
total合计,正好快速看"这批日志加一起多少行"。做总量统计或校验时很方便,不用自己再加。
四、实战:日志错误量监控
# 今天有多少 5xx
grep " 5[0-9][0-9] " access.log | wc -l
# 各状态码数量(接 sort/uniq,见前文)
awk '{print $9}' access.log | sort | uniq -c
# 代码行数统计(去空行去注释)
grep -v '^\s*#' code.py | grep -v '^\s*$' | wc -l第一条是"数匹配行"的监控标配,配合 watch 还能实时盯:
watch -n 5 'grep 500 access.log | wc -l'。第二、三条展示了 wc 在统计流水线里的位置——它通常在末尾收口"到底多少行"。完整聚合套路见 sort/uniq。
五、wc vs awk 计数
wc -l file # 数行
awk 'END {print NR}' file # 同样数行(NR 是行号)单纯数行
wc -l最轻最快;若已经在 awk 流水线里处理数据,用END {print NR}顺手数行,不必再起一个 wc 进程(见 awk 内置变量)。两者等价,按是否在 awk 流程内选。
一句话总结
wc = 统计行/词/字节数:-l 数行是管道标配("匹配了多少行")、-w 词数、-c 字节(中文下 ≠ -m 字符数)、-L 最长行;多文件自动给 total。常坐管道末尾收口,注意 grep|wc -l 数的是行、grep -o|wc -l 才数次数。纯数行也可由 awk 的 NR 替代。