文章

Linux 利用 wc 统计行数和字符长度

前言

在 Linux 环境中可以利用 wc 工具统计行数和字符长度等

统计行数和字符长度

wc 使用特别简单,可以使用 wc --help 查看使用帮助,本文主要记录一下统计行数和字符长度的时候遇到的一个小问题,统计字符的长度不准

在统计一个字符长度的时候明明是 24 位,但是 wc 的结果却是 25

1
2
3
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ echo 000000010000000000000001 | wc -m
25

还好我记得长度是 24 ,wc 统计的结果却是 25,多出来一个字符长度,这是什么原因呢?

1
2
3
4
5
6
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ echo 1 | wc -m
2
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ echo | wc -m
1

可以看到,即便统计空的字符也会有一个字符长度,难道闹鬼了?肯定不是,在现代主义国家,这是不可能的事。这个时候可以利用 cat 工具的 -A 选项查看所有的(隐藏)字符:

1
2
3
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ echo 1 | cat -A
1$

可以发现末尾有一个 ‘$’ ,这怎么处理呢,总不能还要单独处理这个字符吧。因为 echo 会自动换行,所以才会多出来一个 ‘$’ 字符,可以使用选项 -n 避免换行

1
2
3
4
5
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ echo -n 1 | cat -A
1┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ echo -n 1 | wc -m
1

使用 wc -l 统计行数的时候也是同理:

1
2
3
4
5
6
7
8
9
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ echo | wc -l
1
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ echo -n | wc -l
0
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ echo | cat -A
$

总结

其实这不是 wc 工具的问题,是 echo 自动换行/添加新行导致的。如果需要统计 echo 展示的内容行数和字符数量,需要使用 ‘echo -n’ 避免自动添加新行

后续测试发现通过管道符或者直接读取文件中内容都会因为 ‘$’ 字符导致统计字符数量不准确,之前没怎么注意,这次发现这个问题在此记录一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ basename /Postgres/pg10data/pg_wal/000000010000000000000001
000000010000000000000001
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ basename /Postgres/pg10data/pg_wal/000000010000000000000001 | wc -m
25
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ basename /Postgres/pg10data/pg_wal/000000010000000000000001 | cat -A
000000010000000000000001$
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ basename /Postgres/pg10data/pg_wal/000000010000000000000001 > tmp.txt
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ wl -m tmp.txt
-bash: wl: command not found
┌─[✗]─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ wc -m tmp.txt
25 tmp.txt
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ > tmp.txt
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ vim tmp.txt
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ ┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $
┌─[postgres@darkstarc]─[/Postgres/tools]
└──╼ $ wc -m tmp.txt
25 tmp.txt
本文由作者按照 CC BY 4.0 进行授权

© TheDarkStarJack. 保留部分权利。

[本站总访问量次] [本站访客数人次] [本文总阅读量次]

本站采用 Jekyll 主题 Chirpy