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
进行授权