Wc:打印换行符、单词和字节计数

来自泡泡学习笔记
跳到导航 跳到搜索

wc 统计每个给定文件中的字节数、字符数、单词数和换行数,如果没有指定文件或指定文件为“-”,则统计标准输入。 单词是由空白字符分隔的非零长度的可打印字符序列。 使用方法如下:

wc [option]… [file]…

对于每个文件,wc 打印一行计数,并且如果文件作为参数给出,则在计数后打印文件名。 默认情况下,如果给出多个文件,wc 会打印包含累积计数和文件名总数的最后一行。 这个“total”行可以通过 –total 选项进行控制,这是 GNU 的扩展功能。 计数按照以下顺序打印:换行数、单词数、字符数、字节数、最大行长度。 每个计数都右对齐打印在一个字段中,字段之间至少有一个空格,以使数字和文件名通常在列中对齐。 计数字段的宽度根据输入的不同而变化,因此您不应依赖特定的字段宽度。 但是,作为 GNU 的扩展功能,如果只打印一个计数,那么它保证不带有前导空格。

默认情况下,wc 打印三个计数:换行符、单词和字节计数。 可以使用选项指定仅打印特定的计数。 选项不会取消先前给出的其他选项,所以

wc --bytes --words

会同时打印字节计数和单词计数。

使用 –max-line-length 选项,wc 打印每个文件的最长行长度,并且如果有多个文件,则打印这些长度中的最大值(而不是总和)。 这里的行长度以屏幕列为单位进行测量,根据当前的区域设置和假设制表位在每个第8列中。

选项

‘-c’

‘–bytes’

仅打印字节计数。

‘-m’

‘–chars’

根据当前区域设置打印字符计数。无效的字符不计入统计。

‘-w’

‘–words’

仅打印单词计数。单词是由空白字符分隔的非零长度的可打印字符序列。

‘-l’

‘–lines’

仅打印换行符计数。请注意,没有尾随换行符的文件将不包括在行数统计中的最后一个部分。

‘-L’

‘–max-line-length’

仅打印最大显示宽度。制表符设置在每个第8列。考虑到宽字符的显示宽度。不可打印字符的宽度为0。

‘–total=when’

控制何时以及如何打印带有累积计数的最后一行。when 可以是以下之一:

  • auto - 当未指定 –total 选项时,这是 wc 的默认模式。如果指定了多个文件,则输出总计行。
  • always - 始终输出总计行,不管处理的文件数量如何。
  • only - 仅输出总计数。即,不打印单个文件计数,取消任何前导空格,并且不打印“total”本身,以简化后续处理。
  • never - 从不输出总计行。

‘–files0-from=file’

禁止处理命令行上指定的文件,并改为处理在 file 文件中指定的文件;每个名称以零字节(ASCII NUL)结尾。当文件名列表太长以超出命令行长度限制时,这很有用。在这种情况下,通过 xargs 运行 wc 是不可取的,因为它会将列表分割为多个子列表,并使 wc 对每个子列表而不是整个列表打印总计。使用 GNU find 产生以 ASCII NUL 结尾的文件名列表的一种方法是使用其 -print0 谓词。如果 file 为’-’,则从标准输入读取以 ASCII NUL 结尾的文件名。

例如,要在当前目录层次结构中查找任何 .c 或 .h 文件中最长行的长度,请执行以下操作:

find . -name '*.[ch]' -print0 |
wc -L --files0-from=- | tail -n1

退出状态为零表示成功,非零值表示失败。