17. Linux wc命令

wcword count )是 Linux / Unix 中非常常用的一个文本处理命令,

名字虽然是"word count",但它其实可以统计:

  • 行数(lines)
  • 单词数(words)
  • 字符数(characters)
  • 字节数(bytes)

下面我们系统、详细地学习它👇


🧩 一、基本语法

bash 复制代码
wc [选项] [文件名]

如果不加选项,wc 会默认输出:

复制代码
行数 单词数 字节数 文件名

🧠 二、常用选项说明

选项 含义 示例 输出说明
-l 只统计行数(line) wc -l file.txt 仅输出行数
-w 只统计单词数(word) wc -w file.txt 仅输出单词数量
-c 统计字节数(byte) wc -c file.txt 以字节为单位统计文件大小
-m 统计字符数(character) wc -m file.txt 适用于多字节字符(UTF-8)
-L 统计最长行的长度(longest line) wc -L file.txt 输出最长一行的字符数

📘 三、基础示例

假设有文件 text.txt

复制代码
Hello world
Linux is powerful
Shell script

执行:

bash 复制代码
wc text.txt

输出:

复制代码
 3  5 41 text.txt

解释:

数字 含义
3 行数
5 单词数
41 字节数

只统计行数:

bash 复制代码
wc -l text.txt

输出:

复制代码
3 text.txt

只统计单词数:

bash 复制代码
wc -w text.txt

输出:

复制代码
5 text.txt

只统计字符数(区分字节 vs 字符):

bash 复制代码
wc -m text.txt
wc -c text.txt

如果文件是 UTF-8 多字节字符(比如中文),
-m-c 结果会不一样。


🌍 四、处理中文与多字节文件

假设 chinese.txt 内容是:

复制代码
你好 世界
bash 复制代码
wc -c chinese.txt   # 字节数
wc -m chinese.txt   # 字符数

输出可能是:

复制代码
12 chinese.txt      # 每个中文占3字节(UTF-8)
4 chinese.txt       # 4个字符(你好+空格+世界)

⚙️ 五、从标准输入读取(无文件)

wc 不仅能统计文件,还能直接统计 管道(stdin) 数据。

示例1:统计输出行数

bash 复制代码
ls | wc -l

👉 统计当前目录中有多少行(即文件/目录数量)。

示例2:统计命令输出字数

bash 复制代码
echo "I love Linux shell scripting" | wc -w

输出:

复制代码
5

🔁 六、结合管道的常见技巧

任务 命令 说明
统计文件行数 `cat file wc -l`
统计某用户进程数 `ps -u $USER wc -l`
统计日志行数 `grep "error" logfile wc -l`
统计配置文件中非空行 `grep -v '^$' config.txt wc -l`

(1)cat file | wc -l

这条命令的作用是统计file文件的总行数(包括空行),各部分含义如下:

  • cat filecat命令用于读取file文件的内容,并将内容输出到标准输出(屏幕)。
  • |:管道符,将前一个命令(cat file)的输出结果传递给后一个命令作为输入。
  • wc -lwc是统计命令,-l选项表示"统计行数",这里会统计从管道接收的内容(即file的所有内容)的总行数。

最终结果:输出file文件包含的总行数(例如,若文件有10行内容,包括空行,会输出10)。

(2) ps -u $USER | wc -l

这条命令的作用是统计当前用户($USER对应的用户)运行的进程总数(包含标题行),各部分含义如下:

  • ps -u $USER

    • ps 是用于查看系统进程的命令;
    • -u $USER 表示"只显示指定用户的进程",其中 $USER 是环境变量,代表当前登录的用户名(比如你的用户名是"test",则等价于 ps -u test);
      这部分命令会输出当前用户所有进程的信息,包括一行标题行(如 PID TTY TIME CMD,表示进程ID、终端、运行时间、命令名等列名)和各个进程的具体行。
  • |:管道符,将前一个命令(ps -u $USER)的输出结果传递给后一个命令作为输入。

  • wc -l:统计输入内容的行数(-l 是"行数统计"选项)。

最终结果说明:

输出的数字 = 当前用户实际运行的进程数 + 1(标题行)。例如,若当前用户有8个进程,ps -u $USER 会输出9行(8行进程+1行标题),则命令结果为9。

(3) grep "error" logfile | wc -l

这条命令的作用是统计logfile文件中包含"error"字符串的行的总数,各部分含义如下:

  • grep "error" logfile

    • grep用于在文件中搜索匹配指定模式的行,这里的"error"是要搜索的字符串(不区分大小写,若需区分可加-i选项)。
    • 作用是:从logfile文件中筛选出所有包含"error"的行(整行只要出现"error"就会被保留)。
  • |:管道符,将前一个命令(grep)的输出结果作为后一个命令的输入。

  • wc -l

    • wc是统计命令,-l选项表示"统计行数"。
    • 作用是:统计前一步筛选出的"包含error的行"的总数量。

最终结果:输出logfile中包含"error"的行的具体数量(例如,若有5行含"error",则输出5)。

(4) grep -v '^$' config.txt | wc -l

这条命令的作用是统计config.txt文件中非空行的行数,各部分含义如下:

  • grep -v '^$' config.txt

    • grep用于文本搜索,-v表示"反向匹配"(即输出不匹配模式的行)。
    • '^$'是正则表达式,^代表行首,$代表行尾,两者结合表示"空行"(行首到行尾之间没有任何字符)。
      因此,这部分命令的作用是:从config.txt中过滤掉所有空行,只保留非空行。
  • |:管道符,将前一个命令的输出作为后一个命令的输入。

  • wc -l

    • wc是"字数统计"命令,-l选项表示"统计行数"。
      因此,这部分会统计前一步过滤后得到的非空行的总数量。

最终结果:输出config.txt文件中非空行的具体行数。


🧮 七、与 find 结合

统计目录中所有文件的总行数:

bash 复制代码
find . -type f -name "*.sh" -exec cat {} + | wc -l

统计所有 .log 文件的总字节数:

bash 复制代码
find . -name "*.log" -exec cat {} + | wc -c

🧩 八、与 awk 区别

工具 优点 缺点
wc 快、简单、系统命令 无法过滤、处理复杂逻辑
awk 可条件筛选统计 稍复杂但更灵活

例如:

bash 复制代码
awk '{lines++; words+=NF; chars+=length($0)} END {print lines, words, chars}' file.txt

等价于 wc file.txt


🧠 九、文件统计对比实例

假设:

复制代码
$ cat sample.txt
Hello world
Bash shell
Script test

执行:

命令 输出 含义
wc sample.txt 3 6 36 sample.txt 3 行,6 单词,36 字节
wc -l sample.txt 3 sample.txt 3 行
wc -w sample.txt 6 sample.txt 6 单词
wc -m sample.txt 36 sample.txt 36 字符

⚡ 十、统计多个文件

bash 复制代码
wc file1.txt file2.txt

输出示例:

复制代码
 10   45  210 file1.txt
 20   89  415 file2.txt
 30  134  625 total

最后一行 "total" 表示合计结果。


🧩 十一、总结表

任务 命令 示例输出
行数 wc -l file 35 file
单词数 wc -w file 212 file
字节数 wc -c file 1234 file
字符数(含中文) wc -m file 428 file
最长行长度 wc -L file 83 file
多文件合计 wc file1 file2 带 total 汇总行

💡 十二、技巧小结

用法 命令 说明
统计行数最简写 wc -l < file 从标准输入统计行数
统计日志中错误行数 `grep error /var/log/syslog wc -l`
统计当前文件总大小 `find . -type f xargs wc -c`
统计 shell 脚本行数 `find . -name "*.sh" xargs cat

find . -type f | xargs wc -c

这条命令的作用是查找当前目录及其子目录下的所有普通文件,并分别统计每个文件的字节数(文件大小),最后输出所有文件的总字节数,各部分含义如下:

  • find . -type f

    • find 是用于查找文件/目录的命令;
    • . 表示"当前目录"(搜索起点);
    • -type f 表示"只查找普通文件"(排除目录、符号链接、设备文件等);
      这部分命令会输出当前目录及所有子目录中,所有普通文件的完整路径(如 ./docs/note.txt./src/main.py 等)。
  • |:管道符,将前一个命令(find)输出的文件路径传递给后一个命令作为输入。

  • xargs wc -c

    • xargs 用于将前一个命令的输出(文件路径列表)转换为后续命令的参数(避免因文件过多导致命令行参数过长的问题);
    • wc -c 是统计命令,-c 选项表示"统计文件的字节数"(即文件大小,单位为字节);
      这部分会接收 find 找到的所有文件路径,逐个统计每个文件的字节数,最后在末尾输出所有文件的总字节数。

最终结果示例:

假设当前目录及子目录下有 a.txt(100字节)、b.jpg(2000字节)两个文件,命令输出类似:

复制代码
100 ./a.txt
2000 ./b.jpg
2100 总用量

即分别显示每个文件的字节数,最后一行是所有文件的总字节数。

相关推荐
螺旋小蜗4 小时前
Linux Cgroup与Device Whitelist详解
linux·运维·服务器·cgroup
染指11104 小时前
36.渗透-端口
linux·运维·服务器
takashi_void4 小时前
如何在本地部署大语言模型(Windows,Mac,Linux)三系统教程
linux·人工智能·windows·macos·语言模型·nlp
大聪明-PLUS4 小时前
QEMU:如何组织与 I2C 设备的透明交互
linux·嵌入式·arm·smarc
sulikey5 小时前
【Linux权限机制深入理解】为何没有目录写权限仍能修改文件权限?
linux·运维·笔记·ubuntu·centos
liu****5 小时前
8.list的模拟实现
linux·数据结构·c++·算法·list
biubiubiu07065 小时前
VPS SSH密钥登录配置指南:告别密码,拥抱安全
linux
人生苦短,菜的抠脚6 小时前
Linux 内核IIO sensor驱动
linux·驱动开发
jz_ddk7 小时前
[LVGL] 从0开始,学LVGL:进阶应用与项目实战(上)
linux·信息可视化·嵌入式·gui·lvgl·界面设计