主题
wc 命令详解:数行数、单词数、字节数
本文是 Linux 命令速查 中
wc的从 0 到 1 详解。 目标:把wc --help里的每个选项讲清楚,多看几遍后,你在服务器上敲wc --help就知道该用哪个选项。 环境依据:GNU coreutils 8.32(Ubuntu 22.04 自带;RHEL/Rocky 自带版本用法一致)。
一、命令是干什么的
wc 是 word count(字数统计) 的缩写,用来统计一个文件(或一段管道输入)的:行数、单词数、字节数、字符数、最长一行的宽度。
- 想知道一个文件有多少行?
wc -l; - 想知道命令输出有多少条?
命令 | wc -l; - 想知道文件多大(字节数)?
wc -c。
类比:
wc就像 Word 里"字数统计"那个小弹窗,只不过它在终端里秒出结果,而且能直接接在管道后面统计"上一个命令的输出有多少行"。
它属于 GNU coreutils,配合管道是 SRE 日常统计利器。
二、命令语法
bash
wc [选项]... [文件]...[选项]:可选,指定要统计哪几项(行/词/字节/字符/最长行);[文件]:可选,指定统计谁;不写就从标准输入读;可一次给多个,最后会给一个 total 合计。
不加任何选项时,默认一次输出"行数、单词数、字节数"三项。
三、选项全表(对照 wc --help)
wc 选项都是"选要统计哪一项",输出列的固定顺序是:行数、单词数、字符数、字节数、最长行宽。
1. 选统计哪一项
| 选项 | 中文含义 | 什么场景用 |
|---|---|---|
-l,--lines | 统计行数(换行符个数) | 最常用,数文件/输出有几行 |
-w,--words | 统计单词数(空白分隔的词) | 数一段文本有多少个词 |
-c,--bytes | 统计字节数 | 看文件占多少字节 |
-m,--chars | 统计字符数 | 统计中文等多字节字符时用(和 -c 不同) |
-L,--max-line-length | 打印最长一行的显示宽度 | 想看哪行最长、排版对齐时 |
2. 其他
| 选项 | 中文含义 | 什么场景用 |
|---|---|---|
--files0-from=F | 从文件 F 里读 NUL 分隔的文件名列表来批量统计 | 脚本批量处理文件清单时 |
-l、-w、-c、-m可以任意组合。不给任何选项时,等价于同时给了-l -w -c。
四、由浅入深的典型示例
演示文件都在 /tmp/sre_shard_txt 下。demo.txt 内容是 7 行单词:apple / banana / apple / cherry / banana / apple / date。
示例 1:默认一次输出三项
bash
wc demo.txttext
7 7 44 demo.txt三列分别是:7 行、7 个单词、44 个字节,最后是文件名。
示例 2:只数行数(最常用)
bash
wc -l demo.txttext
7 demo.txt
-l是 line 的意思。统计"有多少行"时基本只用它。
示例 3:只数单词数
bash
wc -w demo.txttext
7 demo.txt这里每行一个单词,所以单词数和行数都是 7。一行有多个词时两者就不同了。
示例 4:只数字节数
bash
wc -c demo.txttext
44 demo.txt示例 5:数字符数(中文场景才有别于字节)
bash
wc -m demo.txttext
44 demo.txt本例全是英文字符,一个字符一个字节,所以
-m和-c都是 44。如果文件里有中文,一个中文是 3 个 UTF-8 字节,此时-c(字节)会大于-m(字符)——数"中文字个数"要用-m。
示例 6:看最长一行多宽
bash
wc -L special.txttext
19 special.txt
special.txt里最长一行是line three with\ttab,显示宽度 19。
示例 7:一次统计多个文件并给合计
bash
wc -l long.txt app.logtext
50 long.txt
8 app.log
58 total两个文件分别的行数,最后
total是合计。
示例 8:接在管道后面统计(SRE 高频)
bash
ls | wc -ltext
9
ls列出来的条目数,经过管道交给wc -l数,就得到"当前目录有 9 个条目"。这种"命令 | wc -l"是统计结果条数的万能套路。
五、高频组合速记
| 命令 | 用途 |
|---|---|
wc -l 文件 | 数文件有多少行(最常用) |
wc -c 文件 | 数文件多少字节 |
wc -m 文件 | 数字符数(中文用这个) |
wc -w 文件 | 数单词数 |
wc 文件 | 一次看 行/词/字节 三项 |
命令 | wc -l | 统计上一个命令输出了多少行(万能套路) |
grep 关键词 文件 | wc -l | 统计匹配到多少行 |
六、RHEL 系与 Debian 系差异
wc 属于 GNU coreutils,两系用法完全一致。唯一要注意的细微点:
-c与-m的区别在多字节语言下才有意义,两系都是这个行为;- 统计中文时记得用
-m而不是-c,这是跨发行版通用的注意点。
七、新手易错点
wc -l数的是换行符个数:如果文件最后一行没有换行符,那行不会被计入行数,可能差 1。-c和-m别用反:数字节用-c,数"字符个数"(尤其中文)用-m;纯英文时两者结果碰巧相同。- 不加选项时三列顺序别读错:是"行数 词数 字节数",不是别的顺序。
- 接管道时别再给文件名:
ls | wc -l就行,写成ls | wc -l 文件会变成统计那个文件。 wc只读不写,可放心用。