如何计算文本文件中每种类型的字符(并总计)?

jam*_*ons 6 command-line text-processing

我只是想知道是否有人可以告诉我如何计算文本文件中每个不同字符的出现次数以及最后添加到一起的所有内容的总出现次数。

我只是想根据自己的知识来学习这个过程。

sud*_*dus 7

一般计数与wc

\n

您可以用来wc计算行数、单词数、字符数、字节数……但不能列出每个单独字符的计数。看man wc

\n

计算每个单独字符的数量

\n

如果您想列出每个单独字符的编号,您可以

\n
    \n
  • 首先将每个字符打印到单独的行grep
  • \n
  • 然后对它们进行排序sort
  • \n
  • 然后用来uniq打印每种的数量
  • \n
\n

例子

\n

示例假设您还有一个指向字典文件(单词列表)的链接,网址为/usr/share/dict/words

\n
$ wc --lines --words --chars --bytes /usr/share/dict/words\n102305 102305 971304 971578 /usr/share/dict/words\n
Run Code Online (Sandbox Code Playgroud)\n

字节数多于字符数,因为某些字符由多个字节组成(例如下面列表中的最后一个 [umlaut] 字符)。

\n
  $ < /usr/share/dict/words grep -o '.' |sort |uniq -c\n  29105 '\n  65630 a\n   1438 A\n     12 \xc3\xa1\n      6 \xc3\xa2\n  14654 b\n   1481 B\n  31144 c\n   1636 C\n      5 \xc3\xa7\n  28422 d\n    844 D\n  90579 e\n    653 E\n    148 \xc3\xa9\n     29 \xc3\xa8\n      6 \xc3\xaa\n  10380 f\n    538 F\n  22501 g\n    852 G\n  19325 h\n    919 H\n  68343 i\n    361 I\n      2 \xc3\xad\n   1482 j\n    560 J\n   8188 k\n    680 K\n  41512 l\n    942 L\n  21488 m\n   1768 M\n  58328 n\n    587 N\n      8 \xc3\xb1\n  50187 o\n    409 O\n     10 \xc3\xb3\n      2 \xc3\xb4\n  21691 p\n   1049 P\n   1492 q\n     72 Q\n  58312 r\n    782 R\n  92909 s\n   1656 S\n  53309 t\n    908 T\n  26773 u\n    140 U\n      3 \xc3\xbb\n   7870 v\n   7281 w\n    352 V\n    533 W\n   2139 x\n     44 X\n  12896 y\n    154 Y\n     14 \xc3\xbc\n   3266 z\n    161 Z\n      3 \xc3\xa5\n      2 \xc3\x85\n      7 \xc3\xa4\n     17 \xc3\xb6\n
Run Code Online (Sandbox Code Playgroud)\n


小智 5

有一种非常简单的方法可以计算文本文件中的每个字符。我已使用您自己的问题作为文本文件(称为 countc)并测试了以下代码:

grep '.' -o countc | awk '{a[$1]++} END {for (i in a) print i,a[i]}'
Run Code Online (Sandbox Code Playgroud)

这就是你得到的:

' 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
Run Code Online (Sandbox Code Playgroud)

awk 数组对于此类操作非常有用。