我的文件如下所示:
18 1600014 + CAA 0 3
18 1600017 - CTT 0 1
18 1600019 - CTC 0 1
18 1600020 + CAT 0 3
18 1600031 - CAA 0 1
18 1600035 - CAT 0 1
...
我正在尝试计算覆盖1000列第2列的窗口中第6列的平均值。因此,从1600001-1601000,1601001-1602000等,我的值从1600000-1700000开始。有什么方法可以做到这一步吗?我最初的想法是使用grep
对这些值进行排序,但这需要许多不同的命令。我知道您可以使用awk
计算平均值,但是您可以重复每个窗口吗?
欲望输出将是这样的:
1600001-1601000 3.215
1601001-1602000 3.141
1602001-1603000 3.542
答案 0 :(得分:1)
你可以使用GNU awk来收集计数和总和,如果我理解你的问题是正确的,你可能需要这样的东西:
BEGIN { mod = 1000
PROCINFO["sorted_in"] = "@ind_num_asc"
}
{
k= ($2 - ( $2 % mod ) ) / mod
sum[ k ]+= $6
cnt[ k ]++
}
END {
for( k in sum ) printf( "%d-%d\t%6.3f\n", k*mod +1, (k+1)*mod, sum[k] / cnt [k])
}