wc
命令(最常用)
原理:统计文件中的换行符数量(行数 = 换行符数量)。
命令:
wc -l 文件名
示例:
wc -l access.log # 输出:2500 access.log
参数说明:
-l
:仅统计行数(Line count)。- 若需排除文件名,可结合重定向:
wc -l < access.log # 输出纯数字:2500
grep
命令(支持正则过滤)
适用场景:统计包含特定内容的行数,或排除空行。
命令:
grep -c "^" 文件名 # 统计所有行(含空行) grep -c "[^[:space:]]" 文件名 # 排除空行(只含空格/制表符的行)
示例:
grep -c "ERROR" app.log # 统计包含"ERROR"的行数 grep -c "[^[:space:]]" data.txt # 统计非空行
参数说明:
-c
:输出匹配行数。^
:匹配行首(空行也计入)。[^[:space:]]
:匹配非空白字符的行。
sed
命令(流编辑器)
适用场景:处理大文件时效率较高。
命令:
sed -n '$=' 文件名 # 直接输出总行数
示例:
sed -n '$=' largefile.csv # 输出:100000
参数说明:
-n
:禁止默认输出。- :定位到最后一行并打印行号。
awk
命令(高级文本处理)
适用场景:需同时统计多文件或复杂处理。
命令:
awk 'END {print NR}' 文件名 # 输出总行数 awk 'NF>0 {count++} END {print count}' 文件名 # 排除空行
示例:
awk 'END {print NR}' data.txt # 统计所有行 awk 'NF>0 {count++} END {print count}' notes.txt # 统计非空行
参数说明:
NR
:当前处理的总行数(Number of Records)。NF>0
:当前行非空(字段数大于0)。
cat
+ nl
(显示行号)
适用场景:需预览文件内容及行号。
命令:
cat -n 文件名 # 显示行号及内容 nl 文件名 # 等效于cat -n
示例:
cat -n config.conf # 输出带行号的内容
方法对比与选择建议
命令 | 速度 | 适用场景 | 特殊功能 |
---|---|---|---|
wc -l |
快速统计总行数 | 支持多文件统计 | |
grep |
按条件过滤统计 | 正则匹配 | |
sed |
大文件行数统计 | 简洁高效 | |
awk |
复杂统计(如排除空行) | 编程灵活性 | |
cat -n |
时 | 可视化行号 |
常见问题解决
- 统计目录下所有文件行数:
wc -l *.log # 统计所有.log文件 find /path -name "*.txt" -exec wc -l {} \; # 递归统计
- 排除空行/注释行:
grep -v "^$" file | wc -l # 排除空行 grep -v "^#" script.sh | wc -l # 排除#开头的注释行
- 处理大文件(GB级):
sed -n '$='
或wc -l
内存占用低,速度最快。
- 首选
wc -l
:简单高效,适合大多数场景。 - 过滤需求用
grep
或awk
:如统计错误日志、排除空行。 - 超大文件用
sed
:避免内存溢出。 - 行数统计本质依赖换行符计数,确保文件格式为
LF
(Unix换行符),Windows格式(CRLF
)可能影响结果(可用dos2unix
转换)。
引用说明基于Linux核心工具(GNU coreutils)的官方文档,参考命令的
man
手册(如man wc
),实践环境为Ubuntu 22.04,所有命令均通过Bash测试验证。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7477.html