たとえば、09:00:00 - 16:59:59の間の毎秒の形式のファイルがあります。
[...]
10:59:49,76.77
10:59:50,38.78
10:59:51,23.23
10:59:52,12
10:59:53,26.47
10:59:54,10.2
10:59:55,32.67
10:59:56,14
10:59:57,42
10:59:58,100
10:59:59,100
[...]
データをグラフで作成しようとすると、データがまとめすぎて分かりにくいので、平均を求めてもっと美しくしたいと思います。
たとえば、ファイル内の10分ごとに平均値をどのように見つけることができますか?
09:00:00 - 09:09:59
09:10:00 - 09:19:59
..
..
10:00:00 - 10:09:59
10:10:00 - 10:19:59
and so on...
私は元の平均を見つけるためにawkを使用する予定でしたが、それを実行するために10分のクラスターを抽出する方法を見つけるのに苦労しています。
awk -F "," '{ sum += $2; n++ } END { if (n > 0) print sum / n; }' test_file
テスト用のタイムスタンプを生成するには、サンプルコードを使用してください。
#!/bin/bash
seq -f "%02g" 0 59 > tmp.sec
seq -f "%02g" 30 59 > tmp.firstmin
while read line
do
cat tmp.sec | sed "s/^/09:$line:/;s/$/,$RANDOM/"
done<"tmp.firstmin"
for i in `seq 10 15`
do
while read line
do
cat tmp.sec | sed "s/^/$i:$line:/;s/$/,$RANDOM/"
done<"tmp.sec"
done
ベストアンサー1
区切り文字を使用してから秒を無視して分だけ保持でき:
ます,
。
$ awk -F[:,] '{
thisInterval = substr($2,1,1);
a[$1":"thisInterval"0"]+=$4;
}
END{
PROCINFO["sorted_in"]="@ind_str_asc";
for(t in a){print t,a[t]/600
}
}'
上記を処理するにはGNU awkが必要ですPROCINFO
が、後でいつでも直接並べ替えることができます。また、10分ごとに600個のデータポイントを想定しています。