シェルで複数ファイルの計算方法に困ってます

このQ&Aのポイント
  • ファイル毎に使用容量を管理するシェル作成中、困ってます。
  • カウントと使用量列を加算し新しいファイルに出力する方法を教えてください。
  • diff・grep・sedを試しましたが解決策が見つかりませんでした。
回答を見る
  • ベストアンサー

シェル:複数ファイルの計算方法に困ってます

ファイル毎に使用容量を管理するシェル作成中、下記の内容で困ってます。いいアイデアを教えていただけないでしょうか。 よろしくお願いします。 【 前日分 】old.txt                カウント 使用量 ファイル名                5 10 aaaaaa.txt         5 15 bbbbbb.txt 3 20 dddddd.txt  【 当日分 】 new.txt  カウント 使用量 ファイル名 1 50 aaaaaa.txt 1 65 bbbbbb.txt 1 15 cccccc.txt 【理想】new.tmp カウント 使用量 ファイル名 6 60 aaaaaa.txt 6 80 bbbbbb.txt 1 15 cccccc.txt 3 20 dddddd.txt new.txtと同じ名前がold.txtにあれば、カウント列・使用量列をそれぞれ加算しnew.tmpに出力。 new.txtにあってold.txtに無い場合はそのまま行をnew.tmpに出力 new.txtになくてold.txtにある場合もそのまま行をnew.tmpに出力 説明 カウント・・・毎日加算処理をしカウントを上げていく        (よってnew.txtのカウントは必ず "1") 使用量・・・ファイルの使用量 ファイル名・・・ファイル名 上記のようなことは出来るでしょうか? diff・grep・sedとか調べてみたんですが融合技が見当つかず・・・ よろしくお願いします。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

>diff・grep・sedとか調べてみたんですが融合技が見当つかず・・・ 惜しい(?)。awkです。 A[]にカウント、B[]に使用量を足していきます。 awk '{A[$3]+=$1;B[$3]+=$2}END{for(i in A)print A[i],B[i],i}' old.txt new.txt > new.tmp new.tmpは順不同になるので、ファイル名でソートするなら、sort +2 してください

satoru912
質問者

お礼

早急な回答有難うございます! awkだったんですね・・・。(というものの、聞いたことはあるレベルです・・・) まだシェル初心者ということもあり回答していただいた内容がまだ全く理解出来ていないのが現状なので、今から調べて試したいと思います。

satoru912
質問者

補足

無事出力することが出来ました。 ありがとうございました。

関連するQ&A

  • 文字列の並べ替え

    以下のようなテキストがあります。 AAAAAA BBBBBB CCCCCC DDDDDD CCCCCC BBBBBB BBBBBB DDDDDD AAAAAA これを↓のように横軸で並べ替えたいのです。 AAAAAA BBBBBB CCCCCC BBBBBB CCCCCC DDDDDD AAAAAA BBBBBB DDDDDD 使えるツールとしてはGoogleスプレッドシートです。 なにかいい手順はないでしょうか。

  • グループ毎に通番を付与して返すSQLを教えて下さい

    下記の「テーブル1」から、 テーブル1 商品名|価格 ------------ AAAAAA|1000 AAAAAA|1200 AAAAAA|1500 BBBBBB|2100 BBBBBB|2600 CCCCCC|2000 DDDDDD|3000 EEEEEE|6000 EEEEEE|6000 EEEEEE|7000 EEEEEE|7500 下記のように出力するにはどのようにSQLを書いたらいいでしょうか。 商品名|価格|通番 ------------------ AAAAAA|1000|1 AAAAAA|1200|2 AAAAAA|1500|3 BBBBBB|2100|1 BBBBBB|2600|2 CCCCCC|2000|1 DDDDDD|3000|1 EEEEEE|6000|1 EEEEEE|6000|2 EEEEEE|7000|3 EEEEEE|7500|4 要するに、「商品名」ごとに、「価格」で昇順にソートして「通番」をつけたいのです。 なお、上記「EEEEEE」には価格が6000のレコードが2つありますが、「通番」はそれぞれ1と2をふっています。 このように、価格が同じレコードがある場合にもカウントアップさせて通番を付与したいです。 ご回答よろしくお願い致します。

  • perlプログラム 外部複数ファイルの読み込み処理について

    perlプログラム 外部複数ファイルの読み込み処理について あるフォルダに T0001_05_01,T0001_05_02,T0001_05_03,…,T0001_05_31 という31個のファイルがあります。 それぞれのファイルは 下記のような 形式で記述されております。 (例 T0001_05_01のファイルの中身) 2010-05-01 00:00:00.000 N00001 AAAAAA 2010-05-01 00:00:00.108 N00018 BBBBBB 2010-05-01 00:00:10.305 N00002 AAAAAA 2010-05-01 01:00:10.966 N00008 CCCCCC … また、別のlist.txtに 下記のようなユニークなリストが入っております。 AAAAAA CCCCCC WWWWWW … このとき、list.txtの値が それぞれT0001_05_XXファイルの何行目に出力されているか 出力するperlプログラムを作成したい。 (出力結果イメージ:1ファイル化) T0001_05_01 1行目 2010-05-01 00:00:00.000 N00001 AAAAAA T0001_05_01 3行目 2010-05-01 00:00:10.305 N00002 AAAAAA … T0001_05_31 10行目 2010-05-31 03:00:00.999 N00400 AAAAAA T0001_05_01 4行目 2010-05-01 00:00:00.000 N00008 CCCCCC … perlプログラム知識がないものなので、このようなファイルの出力の仕方がわかりません。 教えていただけると助かります。

    • ベストアンサー
    • Perl
  • エクセルで計算方法教えてください!

    大量の資料を片付けてまとめるのに手間取っています。エクセルでスムーズにまとめたいのですが、例えば… 1000件の取引先リストがあります。 AAAAAA株式会社 BBBBBB株式会社 CCCCCC有限会社 DDDDDD株式会社 EEEEEE有限会社 … 中には同じ会社がかぶっているものがあります AAAAAA株式会社 BBBBBB株式会社 CCCCCC有限会社 AAAAAA株式会社 EEEEEE有限会社 BBBBBB株式会社 … 要するにこれをソートして同じ会社の名前が2つ出てこないようにしたいのです。普通にソートしただけだと… AAAAAA株式会社 AAAAAA株式会社←同じ会社なのでいらない BBBBBB株式会社 BBBBBB株式会社←同じ会社なのでいらない CCCCCC有限会社 EEEEEE有限会社 … 100件程度なら手動で削除も頑張れますが数千件あるとさすがに無理なのでこれを判別して自動的に削除する計算方法があればどなたか教えてください!

  • perl シングルコーテーションを含んだ文字編集

    active perl(アクティブパール)で 以下の文字列編集を行いたいのですが、 シングルコーテーションの編集で上手く出来ずに困っています。 どなたか経験豊富な方、良いコーディング方法があれば ご教授下さい。 やりたい事としては、 文字列 aaaaaa bbbbbb cccccc dddddd といった内容を 取り込んで 'aaaaaa','bbbbbb','cccccc','dddddd' といった文字列の出力を行います。 上記の例では文字はddddddまでですが、 場合により bbbbbbまでたったりといった感じで 変換前の文字の行数は可変で、2行でも3行でも4行でも、 各行の文字をシングルコートで囲って、カンマでつなげた文字列を出力します。 上記の仕様内容で、こうすれば出来る! といったサンプルコードを教えていただけると助かります。

  • SELECT結果から重複行を除く方法

    下記のようなテーブルから重複なくSELECTしたいと考えています。 temp_table ------------------------ | id | name_1 | name_2 | ------------------------ | 1 | aaaaaa | bbbbbb | | 2 | cccccc | dddddd | | 3 | cccccc | dddddd | | 4 | aaaaaa | bbbbbb | | 5 | cccccc | jjjjjj | ------------------------ SELECT結果が下記の要になるのが理想です。 DISTINCTを利用して SELECT DISTINCT id, name_1 || name_2 AS name FROM temp_tableとしましたがダメでした。 --------------------- | id | name     | --------------------- | 3 | ccccccdddddd | | 4 | aaaaaabbbbbb | | 5 | ccccccjjjjjj | --------------------- よい方法をご存じの方、宜しくお願いします。

  • 複数行にわたる処理

    こんばんは。perl初心者です。 どうしてもわからないので、どうかアドバイスよろしくお願いします。 一つのファイルに、以下のような3行で一組の塊がある場合、 <line_a>: aaaaaa <line_b>: BBBBBB <line_c>: cccccc <line_a>: aaaaaa <line_b>: bbbbbb <line_c>: cccccc ... <line_b>の行に文字列"BBBBBB"が含まれていたら、<line_a>の内容を"aaaaaa"から"AAAAAA"に置換してファイルを上書きしたいのですが、 どうやったらいいのでしょうか・・・。

    • ベストアンサー
    • Perl
  • エクセルのオートフィルターにつきまして

    エクセルのことでお聞きしたいことがあります。 下のような、AAAやDDDについての説明がとなりの列に複数行表示されているようなデータを作りました。 AAA aaaaaa     bbbbbb     cccccc DDD dddddd     eeeeee     ffffff そこで、AAAやDDDが書いてある列からAAAだけを選択できるようにして、 AAA aaaaaa     bbbbbb     cccccc のように、AAAの説明のみが表示されるようにしたいのですが、オートフィルターを使ってもうまくいきませんでした。 どなたか、良い方法をご存知でしたら、教えてください。お願い致します。

  • shell diff の使い方について

    shellで差分をとりたいとおもっているのですが・・・ aaa.txtの中身 ※1 aaaaaa_xxx.c ※2 bbbbbb_yyy.c . . . bbb.txtの中身 ※1 aaaaaa.c ※2 bbbbbb.c . . . aaa.txt、bbb.txtそれぞれに200近くのファイル名のみが入っています。 両方のテキストファイルを読み込み、それぞれの※1と※1、※2と※2というふうに 差分を見ていきたいと思っています。行はすべてバラバラです。 差分を見たい対象になる基準は・・・ 例えば、※1であればaaaaaaの部分が同じなので。 (ディレクトリもそれぞれファイルごとにばらばらです) ついでに差分の行数も出力したいと考えています。 なにか良い方法を教えていただけませんでしょうか? shellでつくりたいと思っています。 どうかよろしくお願いいたします。

  • シェルスクリプトで・・・

    シェルスクリプトで・・・ 下記のファイル内にある "yy:mm:dd" 部分を "finish - start" として "aaaaaa" "bbbbbb" "cccccc" ・・・を秒単位で抽出させたいと考えています。 □ ファイル 2010-09-01 08:19:10 aaaaa : start. 2010-09-01 08:19:28 aaaaa : finish. 2010-09-01 08:19:28 bbbbb : start. 2010-09-01 08:30:07 bbbbb : finish. 2010-09-01 08:30:11 ccccc : start. 2010-09-01 08:43:45 ccccc : finish. ・・・・・・・・・・・・・・・・・(ry □ 結果のイメージはこうです。 aaaaaa 17 bbbbb 639 ccccc 814 環境は、centos5 を使っております。 どなたかご教授おねがいします。