返回首页 两个月精通 Shell 脚本

shell 学习第二十二天----计算行数, 字数以及字符数

计算行数,字数以及字符数

wc 命令可能是 linux 工具集里最古老也最简单的工具程序。wc 的默认输出是一行报告,包括行数,字数以及字节数:

echo this is a test of the emergency broadcast system | wc

1 9 49

如果要求仅输出部分结果,可以使用的选项有:-c(字节数),-l(行数),-w(字数);

echo test one two three | wc -c
19
echo test one two three | wc -l
1
echo test one two three | wc -w
4

-c 选项原本是表示字符数,但因为有多字节字符集的编码存在----像是 UTF-8,因此在当前系统上,字节数已不再等同于字符数了,也因此,posix 出现了 -m 选项,用以计算多字节字符,对 8 位字符数据而言,它是等同于 -c 的。

虽然 wc 最长处理的是来自于管道的输入数据,但它也接受命令行的文件参数,可以生成一行一个结果,再附上报告:计算两个文件里的数据

输入命令:wc /etc/passwd /etc/group

输出结果:

40   61 1804 /etc/passwd
64   64  874 /etc/group
104  125 2678 总用量

wc 的现代版会随 locale 而有不同结果: 将环境变量 LC_CTYPE 设为想用的 locale,会影响 wc 把字节序列解释为字符或单词分隔器。

做一个操作,需要把一个文件的行数存在另一个文件里。可是这个 wc 还会同时输出文件名。咋办?简单,用管道处理一下

wc -l demo.txt | awk -F""'{print$1}'

这样,我们就把想要的文件行数给取到了,至于存在另一个文件里,我们可以把 awk 的 print 结果重定向到文件啊。

补充:wc 所有选项

  • -c:统计字节数
  • -l:统计行数
  • -m:统计字符数。 这个标志不能与 -c 标志一起使用
  • -w:统计字数。 一个字被定义为由空白,挑个或换行字符分隔的字符串。
  • -L:打印最常行的长度
  • -help:显示帮助信息
  • --version:显示版本信息