• ベストアンサー

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

terra5の回答

  • ベストアンサー
  • 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も参考にします。 嬉しいですぅ。

関連するQ&A

  • またまたこづかい帳です~

    こんばんは。こづかい帳作っててまた分からなくなっちゃいました。 環境はgawkとbashを用いてlogの集計を行っています。 1/1 gohan 1000 1/1 kaimono 5000 1/1 kaimono 2000 1/2 karaoke 3500 1/2 gohan 1200 1/2 gohan 1500 前回このようなlogを元に集計しました。おかげ様で 1/1 gohan 1000 1/1 kaimono 7000 1/2 karaoke 3500 1/2 gohan 2700 このように集計することが出来ました。ありがとうございます。 でも、ここで時間も入れることにしました。その代わり日付はいりません。 それは一日一回logを集計して、終わったら元データを消すことにしたからです。 07:00 gohan 500 11:00 kaimono 2000 12:00 gohan 1000 15:00 oyatu 300 19:00 gohan 2000 というのがありまして、これを 00:00 0 0 01:00 0 0 02:00 0 0 03:00 0 0 04:00 0 0 05:00 0 0 06:00 0 0 07:00 gohan 500 08:00 0 0 09:00 0 0 10:00 0 0 11:00 kaimono 2000 12:00 gohan 1000 13:00 0 0 14:00 0 0 15:00 oyatu 300 16:00 0 0 17:00 0 0 18:00 0 0 19:00 gohan 2000 20:00 0 0 21:00 0 0 22:00 0 0 23:00 0 0 という風にすることは出来るんですか?これをしようとした時に 初めから元のデータに 00:00 0 0 01:00 0 0 02:00 0 0 続く 22:00 0 0 23:00 0 0 を追加してみて、時間のところが重複したら消すとかやるのかな~と 思ったんですが、そのことを先生に話したら、勝手にデータに追加するなんて ナンセンスだ!って言われちゃいました。それはそうですよね。。。^^ でもuniqコマンドってありますよね。このやり方でも出来ますか? uniqコマンドして$2>0なら消す。。。あれ?uniqコマンドした時点で 消えちゃってるや。。。ダメじゃ~ん(笑)分かる方教えて下さいな~

  • 様々な環境で使うことができるgawk スクリプト

    awk のスクリプトの一行目に、環境に合わせて、 #!/bin/gawk -f とか #!/usr/local/bin/gawk -f とか書かないとだめですよね。rootの権限を持っていない限り gawk の場所を変えることができませんから。 環境が変わるごとに(bashのパスが変わるごとに)この部分を書き換えるのが面倒なのですが、よい方法はないものでしょうか? という質問をした者です。http://self-solution.okwave.jp/kotaeru.php3?q=1867015 一般ユーザーとして、いろんな環境に対応できるスクリプトができないかと思いました。それで、次の回答に興味があるのですが、 > ちょっとトリッキーで一部制約もありますが、shはまず間違いなく/binにあるので、gawkの場合、 > #!/bin/sh > ZZ==1{ exec sh -c "cat $@ | gawk -f $0" ;} ZZ==1、-c の意味と、sh の前に exec が必要な理由を教えていただけないでしょうか?

  • テキストファイルの行抽出

    linux環境のプログラムについて質問です。 ある特定のファイル(テキストファイル)内のデータで 指定の行を抽出する方法を教えていただきたいと思います。 現在はawkを使用してbashスクリプト内で下記のように head, tailを使用していますが、処理が重いように 感じます。perlまたはawkなどで行抽出の軽い処理は できないでしょうか? (他のunixコマンドでも結構です。) ---------------------------------------- RNUM=`awk 'END{print NR}' $1` #行番号取得 for iwl in `seq 1 $RNUM`;do BASE=`head -n $iwl $1 | tail -n 1` done #iwl ---------------------------------------- Fortran, Cなども使えますが、色々組み合わせて使う上で bash内のスクリプトで行ないたいと思います。

  • テキスト処理を行うツール

    現在Linuxの入門書を読んでいます。 その書籍のコマンドに少し触れているページで、 「高度なテキスト処理を行う」コマンドとしてawkとsedが紹介されています。 (1)このawkとsedの違いについてですが、以下のような考えでよろしいでしょうか? 「概念、シンタックス、コードの書き方などに違いはあるが、 実現できるテキスト処理に大差はない」 或いは、共にテキスト処理を行うコマンドであるが、 ターゲットとしている、或いは得意としている処理内容に違いがあるのでしょうか? awkとsedの両刀使いの方は、どのような基準で使い分けているのでしょうか? (2)「高度なテキスト処理を行う」ツールとして、何か1つ習得したいと思っています。 Webの情報を見ていると、awk/sedの利用者は昔からのUNIX/Linuxユーザーが多く、 最近のユーザーはスクリプト言語(perl, ruby, python, ...)を使っているような印象を 受けました。 今から学ぶ場合、スクリプト言語を学ぶ方が活用シーン(Webアプリ開発など)も広がり、 おすすめでしょうか? ご意見をお聞かせください。 よろしくお願いします。

  • awkでの出力項目の追加方法について

    はじめまして。 急遽UNIXサーバをメンテすることになったUNIX素人です。時間に迫られており勉強する時間も今はとれず、皆様のお知恵をお借りしたく質問させていただきます。 現在、コマンド出力結果などの各行の先頭に、日時分秒を追加してテキストファイル出力するシェルスクリプトの作成をしています。 awk を使用して実現したいと思っていますが、具体的な方法についてアドバイスをいただけたらと思っています。 なお、コマンド出力結果をawkへ引き渡す方法は、スクリプト内で直接渡しても、一旦ファイル出力したものを読み込む形のどちらでもよいと思っています。 例 ・ps の出力結果 PID PPID PGID WINPID TTY UID STIME COMMAND 1072 1 1072 1072 con 1005 10:41:29 /usr/bin/bash 1052 1072 1052 544 con 1005 10:50:14 /usr/bin/ps ・日時分秒 を追加した結果 DATE PID PPID PGID WINPID TTY UID STIME COMMAND 200705111735 1072 1 1072 1072 con 1005 10:41:29 /usr/bin/bash 200705111735 1052 1072 1052 544 con 1005 10:50:14 /usr/bin/ps 大変初歩的な質問で申しわけありませんが、なにどぞご教授お願いします。

  • 初歩的なアクセスカウンタ作成で

    perlを学びはじめて間もない初心者です。よろしくお願いします。 書籍を参考にしながらperlを学んでいます。書籍の中のアクセスカウンタを作ってみるという部分で、下記のスクリプトを書き試してみたのですが、アクセスカウンタが加算されません。1のままとなっています。 何が問題であるのか全く見当がつかないのですが、まず何からチェックして行けばよいのでしょうか? アドバイスやご教授をいただけたらと思います。 よろしくお願いします。 それから環境は、http://www.futomi.com/lecture/macosx/index.html​ を元にMacOS X での Apache サーバーでのローカルでテスト環境 で試し低ます。 # カウントファイルの読み込み open(IN, "<./count.dat"); $count = <IN>; close(IN); ++$count; # カウントファイルの書き込み open(OUT, ">./count.dat"); print OUT $count; close(OUT); # サーバー出力 print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head><title>あくせすかうんたー</title></head> <body> <p>あなたは……$count番目の訪問者です。</p> </body> </html> END

    • ベストアンサー
    • CGI
  • 他のサイトを自動引用するスクリプトの例

    インターネット上の一定のフォーマットのHTMLの一部を読み込んで、別の形式で表示する方法をチュートリアル形式で手とり足取り教えてくれるサイトもしくは書籍をご紹介いただけますでしょうか(GoogleNewsみたいなものの作り方)。当方の技量はPerlの入門本をやったきり放置 rubyの本をかじり読み、cygwinからbashを使って特定のソフトのバッチを作れるレベルです。特に他のサイトを読み込む部分がわかりませんが、スクリプトで一旦HTMLを落としてやっているもののでしょうか?漠然とした質問ですが、何か例をいただけると助かりますどうぞよろしくお願いします。

    • ベストアンサー
    • Perl
  • Cygiwinを用いてのインストール

    http://kerolin.jspeed.jp/Computer/Linux/rsperl060815.html 上のURLの説明の中に「RSPerlもコマンド一発で楽チン」という部分がありますが,Cygwinで同じようにコマンドしても"bash:R:command not found"というエラーがでてインストールできません。 RSPerlとはPerlからRという統計解析用の言語を呼び出して使うものなのですが,本家(http://www.omegahat.org/RSPerl/)のページによると使えるのはUNIXだけとかいう説明がありました。そこでCygwinをインストールすればWindowsの環境からでもインストールできると考えたのですが,なぜ最初に紹介したURKではR CMD INSTALL --configure-args='--with-in-perl' RSPerl_0.91-0.tar.gzとしてもエラーが出ずにインストールできているのでしょうか? /home/***のディレクトリにRがインストールされていなければいけないのでしょうか。。。 それからもう1つ質問させていただきます。現在はWindows環境でC://PerlというディレクトリにActive Perlがインストールされているのですが,Cygwinを使ってRSPerlをインストールした場合は(RSPerlがインストールされた場所がActive Perlがインストールされている場所と異なるので)Active PerlからRSPerlを使用することはできないのでしょうか。

  • phpの常識を解説したおすすめの資料を教えてください。

    phpの常識を解説したおすすめの資料を教えてください。 対象読者はこんなひとです。 -プログラミングやUNIX操作に関しては初心者ではない。 -JavaやCやRubyやPerlを普通に使える。 -PHPはちょっとしたものを書いたことはあるがなんでも詳しく知っている訳ではない。 例えば下記のような内容を浅くても良いのでポイントを押さえて網羅的に解説してあるページor書籍はありますか? -基本的な文法等のチートシート的なもの -環境構築、コンフィグ、設定、ビルド(php.ini等) -文字コードの設定 -php4/5の違い -PEARについて -便利なツール類(IDE、エディタ設定、デバッグ等) -運用環境のセオリー 深い部分は後々いやでも調べることになるでしょうからはじめのとっかかりとしての情報源として良いものを探しています。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • アルゴリズムを推定するアルゴリズム

    入力と出力だけを測定してアルゴリズムを推定するアルゴリズムはありますか? 厳密に解析することは不可能という事は知っていますが、推定するアルゴリズムはあるでしょうか?