wc 命令统计文本流的属性,而 nl 会写出输入并生成行号。两者都可以读取文件或 stdin,并把结果发送到 stdout。
文本操作 · 第 15 课
wc 和 nl
学习使用 wc 统计行、单词、字节或字符,并使用 nl 为行编号。
阅读 wc 的默认输出
不指定计数选项时,wc 会输出换行符数、单词数和字节数;如果提供了文件名,后面还会显示文件名:
$ printf 'red blue\ngreen\n' > colors.txt
$ wc colors.txt
2 3 15 colors.txt
从左到右分别是:
2个换行符,以行数显示。3个由空白分隔的单词。- 这个 ASCII 示例中有
15个字节。
如果最后一行文本没有结尾换行符,wc -l 不会把它计入,因为该选项统计的是换行符,而不是视觉上看到的行。
wc file.txt 的默认输出中,前三个数字分别表示什么?
请求单项计数
只选择需要的度量:
-l:统计换行符。-w:统计单词。-c:统计字节。-m:根据当前 locale 统计字符。
例如:
$ wc -w colors.txt
3 colors.txt
对于 ASCII 文本,字节数和字符数相等;但对于 UTF-8 等多字节编码,两者可能不同。使用 stdin 而没有文件名操作数时,wc 通常不显示文件名标签:
$ printf 'one two\n' | wc -w
2
哪个命令只报告 essay.txt 的单词数?
哪个选项会让 wc 根据当前 locale 统计字符而不是字节?
指定多个文件时,wc 会为每个文件输出一项结果,并增加一行 total。GNU wc -L 报告输入行的最大显示宽度。
使用 nl 为非空行编号
默认情况下,nl 会为输入逻辑正文中的非空行编号。假设 notes.txt 的第二行为空:
alpha
beta
空行会保留,但不会获得编号:
$ nl notes.txt
1 alpha
2 beta
nl 会写出带编号的结果;它不会修改 notes.txt。
默认情况下,nl notes.txt 如何处理正文中的空行?
为每一行编号
使用 -ba 可选择正文编号样式 a,为所有行编号:
$ nl -ba notes.txt
1 alpha
2
3 beta
其他选项可以控制格式。例如,-w 3 设置编号字段宽度,-s ': ' 更改编号后的分隔符。
哪个命令会为 notes.txt 中的每一正文行编号,包括空行?
要练习文本计数和行编号,可以尝试以下动手实验:
- Linux wc 命令:文本计数 - 练习使用
wc统计文本文件中的单词、行和字符。 - Linux nl 命令:行编号 - 学习使用
nl为文本文件中的行编号。 - 单词计数和排序 - 运用
wc统计行、单词和字符,并把它与排序结合起来完成实用的文本分析任务。
课程已完成
你已完成 wc 和 nl
现在,你可以在不编辑源文件的情况下度量文本流并添加可见行号。
理解
wc默认输出中的行、单词和字节列。使用
-l、-w、-c或-m选择单项计数。区分字节数和字符数。
使用
nl的默认行为为非空行编号。使用
nl -ba同时为空行编号。