• ベストアンサー

こづかい帳のような集計のアルゴリズムって?

こんばんは。gawkとbashを用いてlogの集計を行っています。 その際にお小遣い帳のような機能を実現することがなかなか出来ずに 困っています。perlだったら、ネットでもかなり情報が豊富だし、 書籍も多いと思うけど、awkってUNIXの基本的な知識ってことでUNIX管理系の 書籍にちょこっと載ってるってケースが多いですよね。それか ものすごく分厚い本でなかなかなじめないようなのとか。。。助けて下さい。 例えば 1/1 gohan 1000 1/1 kaimono 5000 1/1 kaimono 2000 1/2 karaoke 3500 1/2 gohan 1200 1/2 gohan 1500 といったデータがあったとして、これを 1/1 gohan 1000 1/1 kaimono 7000 1/2 karaoke 3500 1/2 gohan 2700 のように集計したいのです。月日の部分を基点にして、1/1の部分についてだけ for(i in count)の形式を用いて集計する。その後1/2の部分について集計する。 というのをずーっと続けていくには、どのようなスクリプトを書けば いいんですか?教えて下さい。どうかお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • terra5
  • ベストアンサー率34% (574/1662)
回答No.1

{ sum[$1,$2] += $3 } END { for ( item in sum ) { split(item, t, SUBSEP ); printf("%s %s %d\n",t[1],t[2],sum[item]); } } こんなのでなんとかなります。 後はパイプでソートするなり、読み込みで空白行を飛ばすなり、・・・

heikekaori
質問者

お礼

わぉ。ご回答ありがとうございます。これだけ情報を頂ければ あとは自分で頑張ってみますね。コードもURLも参考にします。 嬉しいですぅ。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

集計のやり方については No.1 の回答がズバリなので、私は、情報の紹介を。 確かに、awk は perl に比べて情報が少ないですよね。 私は、awk のマニュアルを主体に憶えました。 参考URLには、gawk のマニュアルと、awk を使った数値計算の情報を載せている ページの awk のガイドの URL を載せておきます。 後者のページは、以下の URL からリンクが貼られています。他の人が書いた スクリプトが、意外と良い教科書になったりします。 http://aoki2.si.gunma-u.ac.jp/Hanasi/Algo/algorythm.html

参考URL:
http://www.linux.or.jp/JM/html/GNU_gawk/man1/gawk.1.html,http://aoki2.si.gunma-u.ac.jp/Hanasi/Algo/awk.html
すると、全ての回答が全文表示されます。

関連するQ&A