Category Archives: 6-2.並び替え

アルファベット出現数の一覧を作る(fold)


アニメ『GOSICK -ゴシック-』(2011)

2011年に全部見てるはずですが、全部忘れてるのでまた見てます。
おそらく当時も思ったのでしょうが、このアニメに登場する大きな図書館、すごくいいです。長期間住んでみたい。まあ図書館に住み込んでも、とてもこの量の本を読み切れるわけはないのですが、いつでもたくさんの本が読めるってことを想像すると、わくわくするんですよね。
活字欲が沸いてきたところで、今回は、/usr/share/dict/wordsの各アルファベットについて出現数を調べてみます。

まずは、sedで一文字ずつ分割して、sortとuniqで各アルファベットの出現数を算出してみます。

takk@deb9:~$ cat /usr/share/dict/words | sed 's/\(.\)/\1\n/g' | sort | uniq -c
  99171
  26243 '
   1288 A
   1247 B
   1419 C
    734 D

〜省略〜

  12513 y
   3141 z
      1 Å
     10 á
      7 ä
      6 â
      3 å
      5 ç
    144 é
     28 è
      6 ê
      2 í
      8 ñ
      8 ó
     16 ö
      2 ô
     12 ü
      3 û
takk@deb9:~$

ファイルの最後の方は、フランス語の文字が含まれてるんですね。最後の行をodで文字コードを確認してみましょう。

takk@deb9:~$ tail -1 /usr/share/dict/words | od -tx1a
0000000  c3  a9  74  75  64  65  73  0a
          C   )   t   u   d   e   s  nl
0000010
takk@deb9:~$

エチュードって聞き覚えがあります。

アクセント付きのアルファベットは1文字=1バイトではないので、これを利用すればまとめて分類することができます。
sedの代わりにfoldを使って除外してみます。

takk@deb9:~$ cat /usr/share/dict/words | fold -b1 | sort | uniq -c
    522 �
  26243 '
   1288 A
   1247 B
   1419 C
    734 D

〜省略〜

  12513 y
   3141 z
takk@deb9:~$

複数バイトの文字は、522カウントされている 先頭行に集まりました。
シングルクォートも除外したいので、純粋にアルファベットだけの出現数はtailで上から3行目以降を表示するための、-n+3オプションを指定します。

takk@deb9:~$ fold -b1 /usr/share/dict/words | sort | uniq -c | tail -n+3
   1288 A
   1247 B
   1419 C
    734 D
    596 E
    455 F
    720 G
    752 H
    343 I
    493 J
    582 K
    836 L
   1560 M
    518 N
    359 O
    920 P
     65 Q
    702 R
   1450 S
    819 T
    130 U
    323 V
    453 W
     39 X
    139 Y
    140 Z
  63151 a
  14279 b
  30453 c
  27797 d
  88237 e
  10220 f
  21992 g
  18568 h
  66643 i
   1455 j
   7827 k
  40271 l
  20948 m
  56626 n
  48585 o
  21354 p
   1459 q
  56645 r
  88663 s
  52187 t
  25988 u
   7666 v
   7077 w
   2085 x
  12513 y
   3141 z
takk@deb9:~$

次回は、これを出現率の一覧に変換します。