wc(word count)是常用的统计命令,最典型的是搭配管道符 | 来进行使用;
基本用法:wc [option] [文件] #如果不指定文件,则从标准输入读取数据(搭配管道)
常用参数:
-l lines:统计行数(最常用)-w words:统计单词数(空白分隔)-c bytes:统计字节数-m chars:统计字符数(GNU 扩展)-L 最长行长度输出最长一行的字符数
# 统计文件行数$ wc -l hello.txt #10 hello.txtwc -l main.c # 单个文件wc -l *.c *.h # 多个文件,末尾会加 total# 和管道符结合使用$ ps aux | wc -l # 统计当前进程数$ ls | wc -l # 统计当前目录文件数find ./ -name '*.go' | xargs wc -l # 递归统计某类文件# 统计日志中错误数量grep "ERROR" xxx.log | wc -l # 统计目录下某某文件的个数find . -name "*.txt" | wc -l# 看文件的超大行wc -L xxx.log # 如果输出几百万,就是单行杀手
配合find用法
find . -name '*.c' -exec wc -l {} + 递归统计 C 源文件总行数的简洁写法,既能看到每个文件的行数,又能自动求和。
find . 从当前目录开始递归查找
-name '*.c' 只匹配文件名以 .c结尾的文件
-exec wc -l {} + 将找到的所有 .c文件打包作为参数传给 wc -l; 即:对找到的每个文件执行 wc -l 命令统计行数,{} 是占位符代表当前文件;+ 表示将多个文件一次性传给 wc,避免为每个文件启动一次进程,大幅提升效率(相比 \;)。
{} +这个结尾告诉 find:把所有匹配的文件名收集起来,一次性作为多个参数附加到 wc -l后面,而不是一个一个地执行。
$ find . -name '*.c' -exec wc -l {} + 42 ./src/main.c 87 ./src/utils.c 31 ./test/test_main.c 160 total
与 xargs对比:等价于 find . -name '*.c' -print0 | xargs -0 wc -l,但 -exec {} +更简洁,不需要额外管道。
