如何将具有重复时间戳的大型传感器数据合并为单个平均值数据

时间:2017-05-27 02:53:53

标签: java shell awk

我有一组具有相同时间戳但数据不同的大型传感器数据样本,这意味着在同一时间戳中有大量数据。数据包括时间戳,传感器类型和传感器数据,如下所示:

2017-05-17 23:12:57 169,  TYPE_ACCELEROMETER,    0.40081767,-0.5068207,9.878754   
2017-05-17 23:12:57 169,  TYPE_ACCELEROMETER,    0.40081890,-0.5068207,9.878344  
2017-05-17 23:12:57 169,  TYPE_ACCELEROMETER,    0.40081787,-0.5035457,9.824754  
2017-05-17 23:12:57 169,  TYPE_ACCELEROMETER,    0.40084355,-0.4568207,9.878756  
2017-05-17 23:12:57 169,  TYPE_ACCELEROMETER,    0.40081347,-0.5068277,9.823274  
2017-05-17 23:12:57 169,  TYPE_ACCELEROMETER,    0.40087856,-0.5068887,9.878758  
2017-05-17 23:12:57 169,  TYPE_ACCELEROMETER,    0.40081787,-0.5068678,9.878344  
2017-05-17 23:12:57 169,  TYPE_ACCELEROMETER,    0.40081897,-0.5045667,9.856754 

我的问题是如何将同一时间戳的数据合并为一个平均值?它可能是一个非常大量的数据,所以有任何脚本可以做到吗?

1 个答案:

答案 0 :(得分:0)

这可能是您正在寻找的内容:

$ cat tst.awk
BEGIN { FS=OFS="," }
$1 != prev { prt(); prev=$1 }
{
    ++cnt
    key = $1 OFS $2
    for (i=3; i<=NF; i++) {
        sum[i] += $i
    }
}
END { prt() }
function prt(   i) {
    if (cnt) {
        printf "%s%s", key, OFS
        for (i=3; i<=NF; i++) {
            printf "%s%s", sum[i]/cnt, (i<NF?OFS:ORS)
        }
    }
    cnt = 0
}

$ awk -f tst.awk file
2017-05-17 23:12:57 169,  TYPE_ACCELEROMETER,0.400828,-0.499895,9.86222

如果没有更全面的样本输入/输出,很难说。