![如何计算文本文件中每种字符的数量(并将它们加起来)?](https://linux22.com/image/1184551/%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E4%B8%AD%E6%AF%8F%E7%A7%8D%E5%AD%97%E7%AC%A6%E7%9A%84%E6%95%B0%E9%87%8F%EF%BC%88%E5%B9%B6%E5%B0%86%E5%AE%83%E4%BB%AC%E5%8A%A0%E8%B5%B7%E6%9D%A5%EF%BC%89%EF%BC%9F.png)
我只是想知道是否有人可以告诉我如何计算文本文件中每个不同字符的出现次数,以及最后计算出所有字符出现次数的总和。
我只是想学习这个过程以丰富自己的知识。
答案1
一般计数wc
您可以使用wc
来计算行数、字数、字符数、字节数……但不能列出每个单独字符的计数。请参阅man wc
。
计算每个单独字符的数量
如果你想列出每个单独字符的数字,你可以
- 首先将每个字符打印到单独的行中
grep
- 然后对它们进行排序
sort
- 然后用来
uniq
打印每种的数量
例子
假设你还有一个指向字典文件(单词列表)的示例/usr/share/dict/words
$ wc --lines --words --chars --bytes /usr/share/dict/words
102305 102305 971304 971578 /usr/share/dict/words
字节数比字符数多,因为某些字符由多个字节组成(例如,下面列表中的最后一个 [umlaut] 字符)。
$ < /usr/share/dict/words grep -o '.' |sort |uniq -c
29105 '
65630 a
1438 A
12 á
6 â
14654 b
1481 B
31144 c
1636 C
5 ç
28422 d
844 D
90579 e
653 E
148 é
29 è
6 ê
10380 f
538 F
22501 g
852 G
19325 h
919 H
68343 i
361 I
2 í
1482 j
560 J
8188 k
680 K
41512 l
942 L
21488 m
1768 M
58328 n
587 N
8 ñ
50187 o
409 O
10 ó
2 ô
21691 p
1049 P
1492 q
72 Q
58312 r
782 R
92909 s
1656 S
53309 t
908 T
26773 u
140 U
3 û
7870 v
7281 w
352 V
533 W
2139 x
44 X
12896 y
154 Y
14 ü
3266 z
161 Z
3 å
2 Å
7 ä
17 ö
答案2
有一种非常简单的方法可以计算文本文件中每个字符的数量。我已将您自己的问题用作文本文件(称为 countc),并测试了以下代码:
grep '.' -o countc | awk '{a[$1]++} END {for (i in a) print i,a[i]}'
您将获得以下内容:
' 1
h 9
u 6
46
v 1
i 7
j 2
w 5
k 1
x 1
l 10
y 4
m 3
n 16
a 14
. 2
o 19
p 1
c 12
I 2
d 9
r 14
e 28
f 8
s 8
g 5
t 21
awk 数组对于此类操作非常有用。