添加范围内的相应数字

添加范围内的相应数字

我有一个包含 30000 行的数据集。我想添加 0-50 范围内的所有相应值(即第 2 列),然后是 50.1-100,然后是 100.1-150 等(显示在第 1 列中),并且此顺序将继续执行中的其余行文件。

输入文件:

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

预期输出:

0          15
50         22
100        205
600        10
850        90

我试过

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

但我没有得到预期的输出。

答案1

:

$ 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

例子

printf您也可以使用inside控制输出的格式awk

$ 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   

答案2

这应该可以做到:

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

相关内容