wc -l 文件名是统计行数最常用方法,但需确保每行对应一条有效记录;最后一行无换行符时会少算1行,可用awk 'END{print NR}'替代。

直接用 wc -l 看行数,但得确认“一行=一条数据”
绝大多数场景下,wc -l 文件名 就是你要的答案——它统计换行符数量,也就是文件的总行数。如果每行确实对应一条有效记录(比如日志、CSV、纯文本列表),那结果就是数据条数。
容易踩的坑:
- 最后一行没换行符时,
wc -l会少算 1 行;这时改用awk 'END{print NR}' 文件名 - 文件里混有空行,而你只想算非空数据行:用
grep -c '.' 文件名(注意单引号里的点号) - 想排除注释行(如以
#开头):用grep -v '^#' 文件名 | wc -l
wc 的其他统计维度常被误用
wc -w 统计的是“单词数”,按空格/制表符/换行符切分,不是字段数也不是记录数。对 CSV 或 JSON 文件基本无效。
wc -c 统计字节数,包含所有不可见字符(比如换行符 \n),不能等同于“字符数”或“内容长度”。
真正有用的组合:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
wc -lwc 文件名一次性输出行数、单词数、字节数(顺序由参数顺序决定) -
wc -l *.log批量统计多个日志文件各自的行数,末尾还会加总计 - 配合管道时,
cat 文件名 | wc -l不显示文件名,适合脚本中取纯数字
遇到特殊格式文件,别硬套 wc -l
CSV、JSON、TSV 这类结构化数据,每行未必是一条完整记录(比如 CSV 中字段含换行符,JSON 可能压缩成单行)。这时 wc -l 会失效。
可行方案:
- CSV:用
csvkit工具,csvstat 文件名 | head -n 1查记录数(需先安装) - JSON 数组:用
jq,jq 'length' 文件名(前提是整个文件是一个数组) - 不确定格式时,先用
head -n 5 文件名看前几行结构,再决定怎么数
统计目录下所有文件的总行数,find + wc 是标准解法
想算某个目录里所有 .txt 文件一共有多少行?别用 ls *.txt | wc -l —— 那只数文件名个数,不是内容行数。
正确写法:
-
find /path -name "*.txt" -type f -exec cat {} + | wc -l(推荐,避免参数超长) -
find /path -name "*.txt" -type f -print0 | xargs -0 cat | wc -l(兼容含空格路径) - 如果只想看每个文件各自行数,去掉管道:
find /path -name "*.txt" -type f -exec wc -l {} \;
注意:find 默认递归子目录;加 -maxdepth 1 可限制只查当前层。

















