对多行数据求平均值

对多行数据求平均值

我有一个时间步长的数据文件1024,如下所示:

1 0.240112  0.0610352 1.00659  
2 0.240112  0.0610352 1.00659
...
1024    0.237366  0.0576172 1.00189   

我想做两件事——

  1. 通过对每 N 行的值进行平均,将行数减少 N 倍。因此,例如,对于 N=16,我将剩下 1024/16=64 行数据
  2. 对呈指数增长的行数求平均值。例如,如果我想对每 2^N 行(从 1-2、3-4、5-8、9-16 等)求平均值。在这种情况下,我将剩下 log_2(1024)=10 行。

我可以使用grepawk或某些此类命令来执行此操作吗?

答案1

第一个任务:

awk '
BEGIN {
    N = 16;
}
{
    for(i = 1; i <= NF; i++) {
        arr[i] += $i;   
    }
}
NR % N == 0 {
    for(i = 1; i <= NF; i++) {
        printf "%s ", arr[i] / N;
    }
    print "";
    delete arr;

}' input.txt

第二个任务:

awk '
BEGIN {
    N = 2;
}
{
    for(i = 1; i <= NF; i++) {
        arr[i] += $i;   
    }
}
NR % N == 0 {
    for(i = 1; i <= NF; i++) {
        printf "%s ", arr[i] / (N - M);
    }
    print "";
    delete arr;

    M = N;
    N *= 2;
}' input.txt

相关内容