Média de muitas linhas de dados

2

Eu tenho um arquivo de dados para 1024 time steps que se parece com isso:

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

Eu quero fazer duas coisas -

  1. Diminuir o número de linhas por um fator de N, calculando a média dos valores de cada N linhas. Então, por exemplo, para N = 16, ficaria com 1024/16 = 64 linhas de dados
  2. Média em um número exponencialmente crescente de linhas. Por exemplo, se eu quiser calcular a média de cada 2 ^ N linhas (de 1-2, 3-4, 5-8, 9-16, ...). Nesse caso, ficaria com log_2 (1024) = 10 linhas.

Posso fazer isso usando grep ou awk ou algum comando desse tipo?

    
por ap21 05.10.2017 / 18:41

1 resposta

0

Primeira tarefa:

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

Segunda tarefa:

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
    
por 06.10.2017 / 01:12