読者です 読者をやめる 読者になる 読者になる

perlワンライナー集計処理

以下の様なテキストを入力として受け、出力を合計値にしたい。

a 10000
b
c 33
b 100
a 3993

出力

c 33
a 13993
b 100

シェルスクリプトで実装する方法も考えたが、なんだか面倒なので、
なれないPerlワンライナーにチャレンジ

以下を参考にした。
Perlワンライナー覚書」tossh
http://qiita.com/tossh/items/f8d448c0c039f68c0ea3

結論としては以下とすればよい。

$ cat << EOF | perl -anle '$count{$F[0]}+=$F[1]; END{foreach(keys(%count)){print "$_ $count{$_}"}}'
> a 10000
> b
> c 33
> b 100
> a 3993
> EOF
c 33
a 13993
b 100

勉強したこと

perlワンライナーを各ときはオプションが重要

-a AWK的な感じで入力を区切り文字(スペース)で分割して変数で扱えるようにする。
-n インプットを一行ずつ処理する
-l printの文字列に改行を明示的に書かなくてよい
-e ワンライナーを指定するために必須

ハッシュは初期化しなくても良い。既知のキーが入ってなくても参照できるし、+=を使った場合に0が入っていたかのように振る舞う。
Perlはよくわかっていないが、ワンライナーのために頑張っている感がある。