Adicionando números correspondentes em um intervalo

5

Eu tenho um conjunto de dados com 30000 linhas. Eu quero adicionar todos os valores correspondentes (ou seja, Coluna 2) entre o intervalo 0-50 e, em seguida, 50,1-100 e, em seguida, 100,1-150 etc. (apresentado na coluna 1), e esta seqüência continua para o resto das linhas em o arquivo.

Arquivo de entrada:

10         1
21.1       1
22         1
28         2
30         5
44.44      2
44.45      1
50         2
55         22
100.11     200
105        5
600.2      10
888        90

Resultado esperado:

0          15
50         22
100        205
600        10
850        90

Eu tentei

awk     'NR==1          {printf "%s\t",$1; N=$1+49}
     $1>=N          {printf "%s\n%s\t",sum,N; N+=49; sum=0}
                    {sum+=$2}
     END            {printf "%s\n", sum}
    ' myfile

Mas não estou obtendo a saída esperada.

    
por Namrata 12.11.2013 / 17:32

2 respostas

7

Com :

$ awk '
 {arr[int(($1%50?$1:($1-1))/50)]+=$2};
 END{for(k in arr){print k*50, arr[k]}}
' file.txt | sort -k1,1n

Exemplo

Você pode controlar o formato da saída usando printf dentro de awk também.

$ awk '
 {arr[int(($1%50?$1:($1-1))/50)]+=$2};
 END{for(k in arr){printf "%-11s%-5s\n", k*50, arr[k]}}
' file.txt | sort -k1,1n
0          15   
50         22   
100        205  
600        10   
850        90   
    
por 12.11.2013 / 17:50
1

Isso deve ser feito:

sort -g file | awk 'BEGIN{N=50}{
    if($1<=N){out[N-50]+=$2}
    else{while($1>=N){N+=50;}; 
         out[N-50]+=$2}
    }END{for(i in out){print i,out[i]} }' | sort -g
    
por 12.11.2013 / 18:00

Tags