文件统计 wc

wc 是 word count 的缩写,用于统计文件的行数、字数、字节数。虽然功能简单,但在日志分析、数据处理中非常实用。

基本用法

统计文件的行数、字数、字节数:

wc file.txt

输出示例:

 10  20 150 file.txt

三个数字分别是:行数、字数、字节数。

常用选项

选项含义
-l只统计行数
-w只统计字数
-c只统计字节数
-m只统计字符数
-L最长行的长度
wc -l file.txt
wc -w file.txt
wc -c file.txt

统计行数

-l 统计行数,是最常用的功能:

wc -l file.txt
cat file.txt | wc -l

统计文件数量

ls | wc -l
find . -name "*.txt" | wc -l

统计代码行数

find . -name "*.py" -exec wc -l {} + | tail -1
find . -name "*.js" | xargs wc -l | tail -1

统计字数

-w 统计字数(以空白分隔):

wc -w document.txt
echo "hello world" | wc -w

统计字节数和字符数

-c 统计字节数,-m 统计字符数:

wc -c file.txt
wc -m file.txt

对于 ASCII 文件,两者相同。对于中文等多字节字符,-m 统计字符数,-c 统计字节数:

echo "你好" | wc -c
echo "你好" | wc -m

运行结果:

7
3

"你好"两个汉字占 6 个字节(UTF-8 编码),加上换行符共 7 字节。字符数是 2 个汉字加换行符共 3 个。

最长行

-L 显示最长行的长度:

wc -L file.txt

统计多个文件

wc file1.txt file2.txt file3.txt
wc -l *.txt

输出示例:

 10  20 150 file1.txt
 15  30 200 file2.txt
  8  16 100 file3.txt
 33  66 450 total

最后一行是总计。

配合其他命令

wc 经常与其他命令配合使用。

统计日志中的错误数

grep "ERROR" app.log | wc -l

统计用户数

cat /etc/passwd | wc -l

统计文件类型数量

find . -type f -name "*.txt" | wc -l
find . -type d | wc -l

统计单词频率

cat document.txt | tr -s ' ' '\n' | sort | uniq -c | sort -rn | head -10

统计 IP 访问量

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10

统计目录大小

du -sh * | sort -h

实用示例

统计代码行数

find . -name "*.py" -type f -exec wc -l {} + | sort -n | tail -10
find . -name "*.py" -type f | xargs wc -l | sort -n | tail -10

统计空行数量

grep -c "^$" file.txt
awk '/^$/{count++} END{print count}' file.txt

统计非空行数量

grep -cv "^$" file.txt
awk 'NF{count++} END{print count}' file.txt

统计文件大小

wc -c file.txt
stat -c%s file.txt

统计目录下所有文件

wc -l $(find . -name "*.txt")
find . -name "*.txt" -exec wc -l {} +

比较文件行数

lines1=$(wc -l < file1.txt)
lines2=$(wc -l < file2.txt)
echo "file1: $lines1, file2: $lines2"

注意用 < 重定向输入,wc 不会输出文件名。

小结

  • wc 统计行数、字数、字节数
  • -l 行数,-w 字数,-c 字节数
  • -m 字符数,-L 最长行
  • 经常与 grep、find、sort 等配合使用
  • wc -l < file 不输出文件名