범위에 해당하는 숫자를 추가하세요.

범위에 해당하는 숫자를 추가하세요.

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

printfinside를 사용하여 출력 형식을 제어할 수도 있습니다 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

관련 정보