連想配列でノーマライズ


(凛として時雨 abnormalize)
アニメ『PSYCHO-PASS サイコパス』(2012)

見ないでずっと損してました。
OPがカッコいいかどうかで、アニメを見るかどうか決めることが多いです。

abnormalizeの反対?、今回はノーマライズ、正規化です。正規化といってもあいまいな意味なので、何を正規とするかですが、今回は人が読みやすい形=「正規」として、正規化データを作ることにします。DBの正規化とは逆になりますね。

このような表を、

このような形にしてみます。

まず、CalcやExcelで作った上記表を、適当なテキストエディタ等でファイルへコピペ。tokuten.txtというファイルに格納しました。

takk@deb9:~$ cat tokuten.txt
氏名    教科    点数
A君    国語    50
A君    算数    60
A君    理科    70
A君    社会    80
B君    国語    60
B君    算数    60
B君    理科    55
B君    社会    40
Cさん  国語    60
Cさん  算数    60
Cさん  理科    55
Cさん  社会    40
takk@deb9:~$

Perlで一番左のフィールドを取り除いてみましょう。
タブ区切りデータなので、行頭からタブ以外をs///で削除するだけです。

takk@deb9:~$ perl -pe 's/^[^\t]+//' tokuten.txt
        教科    点数
        国語    50
        算数    60
        理科    70
        社会    80
        国語    60
        算数    60
        理科    55
        社会    40
        国語    60
        算数    60
        理科    55
        社会    40
takk@deb9:~$

次は、連想配列を使って、初回のみフィールドを残すように条件を加えます。

takk@deb9:~$ perl -pae 's/^[^\t]+// if $h{shift@F}++' tokuten.txt
氏名   教科    点数
A君   国語    50
     算数    60
     理科    70
     社会    80
B君   国語    60
     算数    60
     理科    55
     社会    40
Cさん  国語    60
     算数    60
     理科    55
     社会    40
takk@deb9:~$

あとは、これをCalcなりExcelなりに貼り付ければ出来上がりです。

Leave a Reply

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

CAPTCHA