linux统计文本文件中行数、单词数和字节数的命令行工具wc介绍
在这篇文章中,将为您详细介绍一下 Linux 中非常实用的小工具——wc
命令。
wc
命令简介
wc
是 “word count”(单词计数)的缩写。顾名思义,它是一个用来统计文本文件中行数、单词数和字节数的命令行工具。尽管它的名字是“单词计数”,但它的功能远不止于此,尤其是在与其他命令通过管道(|
)结合使用时,wc
会变得异常强大。
基本语法
wc
的基本命令格式非常简单:
wc [选项] [文件名...]
[选项]
: 用来指定你想要统计的具体内容(例如,只统计行数)。[文件名...]
: 你想要统计的一个或多个文件。如果省略文件名,wc
会从标准输入(standard input)中读取数据,这使得它可以和管道符|
完美配合。
常用选项
wc
最核心的就是它的几个选项,让你能够精确控制输出内容:
选项 | 长选项 | 描述 |
---|---|---|
-l | --lines | 只统计行数 (Line count)。一行由一个换行符 \n 定义。 |
-w | --words | 只统计单词数 (Word count)。单词是由空格、制表符或换行符分隔的字符序列。 |
-c | --bytes | 只统计字节数 (Byte count)。 |
-m | --chars | 只统计字符数 (Character count)。这和 -c 很像,但在处理多字节字符(如中文、日文等)时有区别。 |
-L | --max-line-length | 统计文件中最长一行的长度(字符数)。 |
使用示例
为了更好地演示,我们先创建一个示例文件 poem.txt
:
# 使用 cat 和 EOF 来创建一个多行文件
cat << EOF > poem.txt
Hello world,
Linux is powerful.This is the end.
EOF
这个文件包含 4 行(其中一行是空行)、10 个单词。
1. 默认用法(无任何选项)
如果你直接对一个文件使用 wc
,它会按顺序输出 行数、单词数、字节数 和文件名。
$ wc poem.txt4 10 49 poem.txt
输出解读:
4
: 文件有 4 行。10
: 文件有 10 个单词。49
: 文件包含 49 个字节。poem.txt
: 文件名。
2. 使用特定选项
通常我们只关心某一个指标,这时选项就派上用场了。
-
只统计行数 (
-l
)$ wc -l poem.txt 4 poem.txt
-
只统计单词数 (
-w
)$ wc -w poem.txt 10 poem.txt
-
只统计字节数 (
-c
)$ wc -c poem.txt 49 poem.txt
-
统计最长行的长度 (
-L
)$ wc -L poem.txt 18 poem.txt
(“Linux is powerful.” 这一行最长,包含18个字符和一个换行符,但
-L
只计算可见字符数)
3. 统计多个文件
wc
可以同时处理多个文件。它会分别列出每个文件的统计信息,并在最后给出一个所有文件的总计(total)。
# 复制一份 poem.txt 为 poem2.txt
cp poem.txt poem2.txt$ wc poem.txt poem2.txt4 10 49 poem.txt4 10 49 poem2.txt8 20 98 total
4. 从标准输入读取(与管道 |
结合)
这是 wc
最强大的用法之一。它可以接收其他命令的输出,并对其进行统计。当从标准输入读取时,wc
不会显示文件名。
-
统计当前目录下的文件和目录总数
$ ls -1 | wc -l
ls -1
每行列出一个文件名,wc -l
统计这些行数,从而得到文件和目录的总数。 -
统计
ll
命令的输出行数(你最初的问题)$ ll | wc -l
这会统计
ls -alF
输出的所有行,包括 “total” 行和.
..
。 -
统计系统中有多少个用户
系统的用户信息存储在/etc/passwd
文件中,每行一个用户。$ cat /etc/passwd | wc -l # 更简洁的写法 $ wc -l /etc/passwd
-
统计
history
命令记录了多少条历史命令$ history | wc -l
-c
(bytes) vs -m
(chars) 的区别
这个区别在处理非 ASCII 字符(如中文)时非常重要。
-c
统计字节(bytes)。-m
统计字符(characters)。
在 UTF-8 编码下,一个英文字母通常占 1 个字节,而一个中文字符通常占 3 个字节。
示例:
我们创建一个包含中文的文件 chinese.txt
。
$ echo "你好世界" > chinese.txt
现在我们来对比一下:
-
统计字节数:
$ wc -c chinese.txt 13 chinese.txt
为什么是13?因为 “你好世界” (4个汉字) 在 UTF-8 中占
4 * 3 = 12
个字节,再加上一个换行符\n
占 1 个字节,总共 13 个字节。 -
统计字符数:
$ wc -m chinese.txt 5 chinese.txt
为什么是5?因为 “你好世界” 是 4 个字符,再加上换行符
\n
这 1 个字符,总共 5 个字符。
总结
wc
是一个轻量、高效且功能专一的工具,完美体现了 Unix/Linux 的 “做一件事并把它做好” 的设计哲学。当你需要对文本数据进行快速计数时,无论是来自文件还是来自其他命令的输出,wc
都是你的首选工具。掌握它与管道的结合使用,能极大地提升你在命令行下的工作效率。