質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Q&A

解決済

1回答

760閲覧

1秒ごとに出力される数値のデータから300秒毎の平均を計算してファイルに出力したい。

dame-dame

総合スコア78

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

0グッド

0クリップ

投稿2017/08/16 07:09

こんにちは

1秒毎の大量データから移動平均を取るのにどうしたらいいのか腐心しております。
下記のようにA列に時刻、B列に1秒毎に計測した数値を取る場合を想定しております。
下記は元データのtxtファイルです。A列とB列の間はスペースのみで空欄はないものと想定します。

A列 B列

2017/07/07 10:00:01 50
2017/07/07 10:00:02 31
2017/07/07 10:00:03 21
2017/07/07 10:00:04 78
2017/07/07 10:00:05 90

上記のように1行ごとに1つのデータを取得するので5分毎に平均を取りたいです。

具体的には下記のようなデータに変換したいと思っています。
A列5分毎の時刻、B列に過去300秒(つまり5分毎)の平均が出力されるようにしたいのです。

A列 B列
2017/07/07 10:05:00 31
2017/07/07 10:10:00 21
2017/07/07 10:15:00 78
2017/07/07 10:20:00 90

元データは1ヶ月分つまり約2592000秒分のデータがあるので上記のように5分毎の
平均を取りたいと思っています。

A列もB列も加工しなければならないと思いますが、考えてみましたがだめでした。
OSはLINUX(CENTOS7)です。何かいい方法はありませんでしょうか?

よろしくお願いいたします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

データが 10:00:01 から始まって毎秒まったく抜けがないのであれば、300行ごとに集計してやればいいので、

bash

1LINES=0 2DATA=0 3while read DATE TIME COUNT 4do 5 LINES=$(( LINES + 1 )) 6 DATA=$(( DATA + COUNT )) 7 if [ $LINES eq 300]; 8 then 9 AVERAGE=$(( DATA / 300 )) 10 echo $DATE $OLDTIME $AVERAGE 11 LINES=0 12 DATA=0 13 fi 14 OLDTIME=$TIME 15done < data.txt

でよさそうな気はします。

が、実際にはデータが必ず ??:00:01 から始まるわけではないでしょうから、もう少し考える必要はあるでしょうね。
読み込んだ行の TIME が、正規表現で \d\d:\d[50]:00 である行だった場合に集計処理する、という形になるのかな。

投稿2017/08/16 07:44

編集2017/08/16 07:51
tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dame-dame

2017/08/16 09:38

おお、ありあがとうございます。eq は-eqにしたらエラーがとまりました。これそのまま使わせていただきます。 何時もありがとうございます!
tacsheaven

2017/08/16 10:10

上のままだと最後に300行に満たなかった部分は集計結果が出ませんので、多少修正が必要になると思います。まあそういう状態は考えなくていいならよいのですが。 ※while ループを抜けたときに、LINES が 0 でないなら、未集計分が残っています
dame-dame

2017/08/16 23:01

ありがとうございます!今後共よろしくお願いいたします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問