如何使用 awk 将文件的每 n 行替换为其平均值?
这个问题完美地回答了这个问题,除了它只处理一列并且3
没有参数化:
如何总结每 10 行并使用 AWK 计算平均值?
基本上我想拿一个这样的文件
1 1
2 1
3 1
4 1
5 1
6 1
2.5 2.0
3.5 2.0
4 2.0
并获得这样的东西:
2 1
5 1
3.33 2.0
如何使用 awk 将文件的每 n 行替换为其平均值?
这个问题完美地回答了这个问题,除了它只处理一列并且3
没有参数化:
如何总结每 10 行并使用 AWK 计算平均值?
基本上我想拿一个这样的文件
1 1
2 1
3 1
4 1
5 1
6 1
2.5 2.0
3.5 2.0
4 2.0
并获得这样的东西:
2 1
5 1
3.33 2.0
$ awk -v rows=3 '{c1+=$1; c2+=$2} (NR%rows)==0{printf "%.2f %.2f\n", c1/3, c2/3; c1=0; c2=0}' input
2.00 1.00
5.00 1.00
3.33 2.00
这是一个完整的shell脚本:
awk -v count=3 '
{
if ( NF > tot_col )
tot_col = NF;
cur = 1;
while ( cur <= NF )
{
sums[cur] += $cur;
cur++;
}
if ( ( NR % count ) == 0 )
{
cur = 1;
while ( cur <= tot_col )
{
printf("%0.2f ", sums[cur] / count);
cur++;
}
print "";
delete sums;
tot_col = 0;
}
}' "$@"