输入:
11 1
12 2
13 3
21 1
24 2
33 1
50 1
假设第1列指定 index 。我想减少我的数据大小如下:
根据索引,我将第二列的值与粒度为10的值相加。一个例子:
首先,我考虑指数范围为0-9。该范围内没有任何指数,因此总和等于0.接下来我转到下一个范围10-19。有3个指数(11,12,13)符合范围。我对第二列的值求和,它等于1 + 2 + 3 = 6。等等...
理想的输出:
0 0
10 6
20 3
30 1
40 0
50 1
这就是我的成就:
M=0;
awk 'FNR==NR
{
if ($1 < 10)
{ A[$1]+=$2;next }
else if($1 < $M+10)
{
A[$M]+=$2;
next
}
else
{ $M=$M+10;
A[$M]+=2;
next
}
}END{for(i in A){print i" "A[i]}}' input_file
很抱歉,但我对AWK并不擅长。
经过一些改变:
awk 'FNR==NR {
M=10;
if ($1 < 10){
A[$1]+=$2;next
} else if($1 < M+10) {
A[M]+=$2;
next
} else {
M=sprintf("%d",$1/10);
M=M*10;
A[M]+=$2;
next
}
}END{for(i in A){print i" "A[i]}}' input
答案 0 :(得分:0)
{
ind=int($1/10)*10
if (mxi<ind) mxi=ind
a[ind]++
}
END {
for (i=0; i<=mxi; i+=10) {
s=(a[i]*(a[i]+1))/2
print i " " s
}
}