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


アニメ『博多豚骨ラーメンズ』

今期一番好きなアニメです。

前回の続きです。アルファベットの出現数を総数で割って比率を求めます。

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

~省略~

takk@deb9:~$

前回はここまで求めました。
左側にアルファベットの数、右側に該当するアルファベットとなっています。
まずは、総数の計算。awkで左側の数字は、$1に格納されているので、変数sに加算していきます。

takk@deb9:~$ fold -b1 /usr/share/dict/words | sort | uniq -c | tail -n+3 | awk '{s+=$1}END{print s}'
812912
takk@deb9:~$

アルファベット総数は、812912でした。
この数字を覚えておいて、計算式に組み込みっというのも手ですが、覚えられないので変数で覚えることにします。

次は、各アルファベットをキーにして連想配列にカウント数を格納します。右側のアルファベットは$2に格納されてますので、h[$2]=$1とするだけで格納できます。
ENDブロックで連想配列に格納したカウント数を総数で割って、比率(%)に変換します。

takk@deb9:~$ fold -b1 /usr/share/dict/words | sort | uniq -c | tail -n+3 | awk '{s+=$1;h[$2]=$1}END{for(key in h){print h[key]*100/s}}'
0.158443
0.153399
0.174558
0.0902927
0.0733167
0.0559716
0.0885705
0.0925069
0.042194
0.0606462
0.0715945
0.10284
0.191903
0.0637215
0.0441622
0.113173
0.00799595
0.0863562
0.178371
0.100749
0.0159919
0.0397337
0.0557256
0.00479757
0.017099
0.017222
7.76849
1.75652
3.74616
3.41944
10.8544
1.25721
2.70534
2.28413
8.19806
0.178986
0.962835
4.95392
2.57691
6.96582
5.97666
2.62685
0.179478
6.96816
10.9068
6.41976
3.1969
0.94303
0.870574
0.256485
1.53928
0.386389
takk@deb9:~$

この数字合ってるでしょうか。全部足して答えを確認してみましょう。

takk@deb9:~$ !! | awk '{s+=$1}END{print s}'
fold -b1 /usr/share/dict/words | sort | uniq -c | tail -n+3 | awk '{s+=$1;h[$2]=$1}END{for(key in h){print h[key]*100/s}}' | awk '{s+=$1}END{print s}'
99.9999
takk@deb9:~$

約100ということで、合格ですね。

では最後に、アルファベットと並べて表示してみましょう。

takk@deb9:~$ fold -b1 /usr/share/dict/words | sort | uniq -c | tail -n+3 | awk '{s+=$1;h[$2]=$1}END{for(key in h){printf"%s %5.2f%\n", key,h[key]*100/s}}' | pr -t4J
A  0.16%        N  0.06%        a  7.77%        n  6.97%
B  0.15%        O  0.04%        b  1.76%        o  5.98%
C  0.17%        P  0.11%        c  3.75%        p  2.63%
D  0.09%        Q  0.01%        d  3.42%        q  0.18%
E  0.07%        R  0.09%        e 10.85%        r  6.97%
F  0.06%        S  0.18%        f  1.26%        s 10.91%
G  0.09%        T  0.10%        g  2.71%        t  6.42%
H  0.09%        U  0.02%        h  2.28%        u  3.20%
I  0.04%        V  0.04%        i  8.20%        v  0.94%
J  0.06%        W  0.06%        j  0.18%        w  0.87%
K  0.07%        X  0.00%        k  0.96%        x  0.26%
L  0.10%        Y  0.02%        l  4.95%        y  1.54%
M  0.19%        Z  0.02%        m  2.58%        z  0.39%
takk@deb9:~$

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA