• ベストアンサー

集計するシェルスクリプト

りんご,3 みかん,2 りんご,5 りんご,1 なし,3 みたいなデータを りんご,9 みかん,2 なし,3 のように集計するシェルスクリプトを書こうと思っています。 sortとuniqでレコードの名前を外部ファイルに書き出してループ処理というのは思いついたのですが、いまいち綺麗じゃないような気がします。外部ファイルを使わずに処理する方法があれば、教えてください。

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

  • ベストアンサー
  • astronaut
  • ベストアンサー率58% (303/516)
回答No.1

私なら perl を使います. #!/usr/bin/perl while(<STDIN>){ @data=split /,/; $hash{"$data[0]"} += $data[1]; } while (($name, $value) = each(%hash)) { print "$name = $value\n"; }

100Gold
質問者

お礼

ご回答ありがとうございます。 awkを使いました。 BEGIN{ FN="," } { data[$1] += $2 } END { print $1,$2 } 今度からなるべくPerlにしようかなと思います。 なんとなくいつも避けてしまうので。

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

関連するQ&A

  • awkで列を集計するシェルについて

    シェル初心者です。教えてください。 ログファイルが10万行超えるものでシェルにて集計することになり、下記のような集計ができればと思っています。 商店名 商品名  価格 A商店 りんご   100 B商店  ぶどう 300 A商店  みかん 150 C商店  りんご 100 A商店  りんご 100 B商店  みかん 150 C商店  りんご 100 C商店  ぶどう 300 ※各列はブランク(空白)によって区切られ、改行済みで行数は10万行以上 (1)awk '{print $1}' | uniq -d (重複した商店の抽出) (2)awk '{print $2}' | uniq -d (重複した商品名の抽出) (1)、(2)の抽出を満たす「価格」の合計を"集計結果”として > shukei.txt などに出力したいと思ってます。 VBAでいれば、firlterしsumifして合計するようなイメージのものです。 ご教授お願い致します><

  • Excel2003でデータの集計をしたいのですが

    下記のようなデータがあるときに日別店舗別商品別の個数の集計表を作成したいのですが。 日付 店舗 商品 個数 1/1 東京 りんご 1 1/1 大阪 みかん 2 1/1 東京 りんご 3 1/2 東京 みかん 4 1/3 東京 りんご 5 1/3 大阪 なし 6 1/3 大阪 りんご 7 1/3 東京 りんご 8 ↓ 集計 1/1 東京 りんご 4 1/1 大阪 みかん 2 1/2 東京 みかん 4 1/3 東京 りんご 13 1/3 大阪 なし 6 1/3 大阪 りんご 7 ピポットテーブルで処理しようとしましたが、うまくいきません。 よい方法はないでしょうか?

  • シェルスクリプトに関する質問です

    シェルスクリプトに関する質問です 以下のようなシェルスクリプトを書きたいのですが,難しくて出来無いのでどなたか ご協力お願いします。 foldaという名前のフォルダの中に1~100のフォルダがある. それら100個のフォルダの中に,それぞれfile.txtというテキストファイルがあり,これには 112.73 のように小数点ありの数字が1行書かれている. このfile.txtの内容を全て読み取って,それら100個分のデータを 1つのファイルに出力するスクリプト スクリプトファイルはfoldaの中にあるものとする. よろしくお願いします.

  • シェルスクリプトでの時間合わせ

    以下の処理を、シェルスクリプトを使って自動化しようと思っています。 作成日が現在日時ではないファイルを、たくさん作成するスクリプトです。 1、現在日時を変更 ↓ 2、ファイルをたくさん作成 ↓ 3、現在日時を正しいものに戻す この、現在日時を正しいものに戻す処理をどのように行おうか迷っています。 ちなみに、インターネットは外部に繋がっていないので、 外部ntpサーバを使用しての時刻合わせはできません。 また、ファイル作成処理に時間がかかる事が予想できるので、 処理開始時に現在時刻を覚え、終了時にその時間に戻した場合は、 (作成処理時間分)時刻がずれてしまう懸念があります。 なにかいい方法があったら教えてください。 よろしくお願いいたします。

  • エクセルの集計

    エクセルの集計で質問します。 A列に「りんご」か「みかん」が入っている行を集計したいと思っています。    A 1 りんご、なし 2 みかん、もも 3 りんご、みかん 4 ぶどう 5 りんご 6 ぶどう、もも 7 みかん という表があると、期待している集計値は「5」なのですが、どのような関数を使えばよいかわかりません。 よろしくお願いします。

  • UNIXでシェルスクリプトを作ることを始めましたが、まだ未熟者です。

    UNIXでシェルスクリプトを作ることを始めましたが、まだ未熟者です。 既存のスクリプトが複数あるのですが、 全てに対して同じ処理を入れ込む必要があります。 入れ込む内容はレイアウトを変更するだけ(awkで書く予定)なので簡単なのですが、 既存スクリプトに全て書き込むのは大変です。 また入れ込んだ処理内容に変更があったときに、全てのスクリプトに変更をひとつひとつ反映させるのは大変です。 入れ込む処理を別ファイルで作成しておいて、 既存スクリプトからはこのファイルを参照するだけにしたいのですが、 どのように書いたらいいのでしょうか?教えてください。

  • Excelで簡単にデータ集計する方法

    お世話になります。 以下のような形式のCSVデータファイルがあります。  品名,個数,金額(=単価x個数) 例えば、  ミカン,1,80  ミカン,1,75  リンゴ,2,420  ミカン,2,140  リンゴ,10,1900 といった感じです。 これを集計して、品名毎に個数と金額の合計を得たいのですが、 Excelを使用して簡単にできる方法はございますでしょうか? 品名が少なければ、品名でソートして手作業で SUM()を設定するのですが、 今回、品名の種類が多すぎてとても手作業ではできない状況です。 どうぞよろしくお願いいたします。

  • シェルスクリプトについて

    シェルスクリプトを勉強しています。 hoge.txt内で"AAA"という文字列を"BBB"という文字列を検索し下記のような処理を行いたいです。  (1)AAA・BBBともにある場合  →スクリプトを続行  (2)AAA・BBBともにない場合  →スクリプトを停止  (3)AAAしかない場合  →BBBがありませんというメッセージを流す    (4)BBBしかない場合  →AAAなしでスクリプトを続行しますというメッセージを流す   シンプルなやり方でいいので上記のようなことを行いたい場合、どのようにスクリプトを書けばいいのか教えてください。 よろしくお願いします。

  • エクセルでの集計に関して

    こんにちは。いつもお世話になっております。 例えばですが、以下のようなCVSのデータがあります。 (エクセルで開けます。) 昇順 降順に変更可能です。 これが、何週間分かあり、タブがあって日にちごとに見れますが、 30件ほどの品目の、200件ほどのデータが50件ずつにのみ表示されます。 4/1分データ    品名   売り上げ数   りんご1  100    りんご2  200    みかん1  300    みかん2   400    バナナ1  500             次の50件→ -------------------------------------------- 4/2分データ    品名   売り上げ数   りんご1  1000    りんご2  2000    みかん1  3000    みかん2   4000    バナナ1  5000   バナナ2  6000   アボガド  7000   いちご   8000     次の50件→      ↓続く これを、エクセルで下記のようにしたいのです。 ********************************************** ID  品名    4/1分集計 4/2集計  4/3集計  4/4集計  4/4集計~~ A   りんご1  100   1000    300 B   りんご2  200   2000    400  C   みかん1  300   3000    500 D  みかん2   400   4000    600 E   バナナ1  500    5000    700 D  バナナ2        6000    800 E  アボガド       7000    900 F  いちご       8000    1000 日にちによって当然、新たな項目、アボガドやいちごがあったりします。みなさんでしたら、最速で一番簡単に行う為にどうしますか? ちょっといそいでてお知恵をどなたか下さい! ご教授下さいますようお願い致します。

  • エクセルの集計について質問です。

    いつもお世話になっております。 集計を使用しないで関数やマクロを使用して計算することは可能でしょうか? こういったリストを 名称 1日 2日 3日… りんご 1  0  3 りんご 0  0  1 みかん 1  1  4 なし   0  0  2 みかん 1  0  0 こんな感じに集計したいのです。 名称 1日 2日 3日… りんご 1  0   4 みかん 2  1   4 なし   0  0   2 順番とかは特に拘っておりません。 宜しくお願い致します。