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