「wc(1)」-

  LINUX MANUAL PAGES

计算每个文件中字节数,字符数,字数,行数

命令行语法格式

wc [OPTION]… [FILE]…
wc [OPTION]… –files0-from=F

命令描述

wc可以用于统计文件中的字节数、字符数、字数、行数。

文件参数FILE为要统计的文件名。如果没有给出FILE,或者FILE为‘-’,则从标准输入中读取文件数据。

命令wc为每个FILE打印一行计数信息。如果指定了一个文件参数FILE,则会在计数之后打印文件名。如果给出多个文件参数FILE,则命令wc会在输出的最后一行打印一行累计值,而文件名部分为“total”。输出结果中的计数值按以下顺序打印:行数、字数(长度非零的字符集合)、字符、字节、最大行长度,这个顺序与命令行中对应选项的顺序无关。每个计数都是右对齐打印的,字段之间至少有一个空格,这使得计数和文件名在列中排列整齐。计数的宽度取决于输入,因此你不应该依赖于特定的字段宽度。但是,作为GNU扩展,如果仅打印一种计数,则打印结果中不带前导空格。

默认情况下,wc打印三个计数:行数,字数,字节计数。可以通过选项只打印特定计数。选项不会覆盖先前给出的其他选项,如下:

# wc –bytes –words

上面的命令打印字节数和字数。

使用–max-line-length选项,wc会打印每个文件中最长的行的长度。如果命令行选项中指定了多个文件,则会在最后的total行中打印这些长度的最大值(不是总和)。根据当前的语言环境并假设TAB字符的宽度为8,此处的行长度在屏幕列中进行测量。

命令支持的选项及含义

-c, –bytes
只打印字节数。

-m, –chars
打印字符的个数。

-l, –lines
打印行数。以换行符(LF)的个数进行计算的。就是说,如果文件的最后一行没有换行符(LF),那计算结果会比实际的行数少一行。

-L, –max-line-length
打印文件中最长行的字符个数。如果指定了多个文件,最后的total行中显示这些字符个数中的最大值,而其他的则是显示一个合计值。

TAB会被视为8个字符;宽字符的显示宽度会考虑在内;不可打印字符的宽度为0。

-w, –words
输出文件中字的个数。

–files0-from=filename
不处理命令行中FILE,而是处理文件filename中指定的文件名列表;其中,filename中的每个文件名都以NUL(ASCII NUL)结尾的。当FILE列表长度超过命令行长度限制时,这个选项很有用。

有些情况下,通过xargs(1)运行wc是无法满足需要。因为xargs将文件列表分成多个单独输入的文件传给wc执行,等价于在终端中多次执行wc命令,而不是一次性给wc提供多个文件,因此无法使用wc的统计功能(那个total行)。可以使用find(1)的-print0选项,使用find生成以ASCII NUL终止的文件名列表。如果文件filename为“-”,则从标准输入读取filename。

如下示例中,找到在所有文件中包含最长行的那个文件:

# find . -name ‘*.[ch]’ -print0 | wc -L –files0-from=- | tail -n1

你可以将上面的命令和下面的命令进行对比:

# find . -name ‘*.[ch]’ -print0 | xarg -0 wc -L | tail -n1

可能这两个命令都去掉| tail -n1部分后的运行结果的反差会更明显。

–help
显示帮助信息并退出。

–version
显示版本信息并退出。

退出码

0表示执行成功。而非0表示执行失败。

相关手册

完整在线手册:http://www.gnu.org/software/coreutils/wc

查看info手册:info ‘(coreutils) wc invocation’

参考文献

  • man 1 wc, version GNU coreutils 8.26

更新日志

  • 04/05/2017 创建文章
  • 06/12/2018 更新文章内容
  • 07/10/2018 更新-c选项说明。