ls -l で日毎のファイルサイズを知りたい(select sum(filesize) from 'ls -lの出力' group by 日付; みたいな処理)

具体的にはこういう事がしたいわけだ。

$ ls -l
total 10330
-rw-r--r--   1 tuser    users    1089767 Mar  7 23:40 sqlite-amalgamation-3_6_22.zip
-rw-r--r--   1 tuser    users    3872493 Jan  6 08:29 sqlite3.c
-rw-r--r--   1 tuser    users     268351 Jan  6 08:30 sqlite3.h
-rw-r--r--   1 tuser    users      20686 Jan  6 08:30 sqlite3ext.h

sqliteのソースなのは大した意味はない。ここから1月6日に作られたファイルサイズの合計はいくつなんだろう?と、つまりこういう出力が欲しい。

Jan_6 4161530
Mar_7 1089767

Jan_6というのが、1月6日に 4161530 byte 分のファイルを作成しました、と言う感じになる。
この例だと行数が少ないから電卓叩いても良いんだろうが、実際に仕事の時にはどうやってこういう出力を出そうとしばらく考えて、結局、近くにあったDBに「そういうテーブル作って、insertで、ls -l の出力を入れて、select sum(val)〜 group by day 」というような事をした。そう、これはselect文のgroup by で解決できる典型的な例だ。
sqlで解決するにはいささか大掛かり過ぎて日常的には使用できない。で、こういうワンライナーを考えてみた。

$ ls -l | awk '{ar[$6"_"$7] += $5} END{for(i in ar){print i, ar[i]}}'
Jan_6 4161530
Mar_7 1089767
_ 0
$

1行余計なのが出るがまぁそれは無視するとして、これでなんとかなるんだろう。
昔は、コマンドラインイメージの方が先に出たのに、group by系の処理はいつの間にかsqlで考えるようになってしまった。恐るべし、集約関数。