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
4

2 回答 2

2
$ 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
于 2013-09-06T05:06:14.157 回答
1

这是一个完整的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;
        }
    }' "$@"
于 2013-09-06T04:59:01.927 回答