查找第 1 列中每个不同变量的多列平均值

Find the average of multiple columns for each distinct variable in column 1

您好,我有一个包含 6 列的文件,我想知道其中三个列(第 2、3、4 列)的平均值以及最后两列(第 5 列和第 6 列)对于每个唯一变量的总和第一栏。

A1234 0.526 0.123 0.456 0.986 1.123
A1234 0.423 0.256 0.397 0.876 0.999
A1234 0.645 0.321 0.402 0.903 1.101
A1234 0.555 0.155 0.406 0.888 1.009
B5678 0.111 0.345 0.285 0.888 0.789
B5678 0.221 0.215 0.305 0.768 0.987 
B5678 0.336 0.289 0.320 0.789 0.921

我遇到过可以根据第一列获得第二列平均值的代码,但无论如何我可以将其扩展到各列吗?谢谢

awk '{a[]+=; c[]++} END{for (i in a) printf "%d%s%.2f\n", i, OFS, a[i]/c[i]}'

我希望输出采用以下格式;第一列中的每个变量也将具有不同的行数

A1234 0.53725 0.21375 0.41525 3.653 4.232
B5678 0.22233 0.283 0.30333 2.445 2.697

计算第 2、3、4 列的平均值:

 awk '{ sum +=  +  +  } END { print sum / (NR * 3) }'

按第1列计算第5列和第6列的总和:

 awk '{ arr[] +=  +  } END { for (a in arr) if (a) print a, arr[a] }'

要计算最后一行的第 5 列和第 6 列:

 tail file -1 | awk '{sum +=  + } END {print sum}'

尝试关注一次,如果这对您有帮助,请告诉我。

awk '{A[]=A[]?A[]++:+;C[]=C[]?C[]+++:++;B[]++} END{for(i in A){print "Avg. for " i" =\t",C[i]/(B[i]*3) RS "Count for " i" =\t",A[i]}}'  Input_file

编辑: 现在也添加非单线形式的解决方案。

awk '{
        A[]=A[]?A[]++:+;
        C[]=C[]?C[]+++:++;
        B[]++
     }
        END{
                for(i in A){
                                print "Avg. for " i" =\t",C[i]/(B[i]*3) RS "Count for " i" =\t",A[i]
                           }
           }
    '   Input_file

awk 解决办法:

awk '{ a[]++; avg[]+=++; sum[]+=+ }
     END{ for(i in a) printf "%s%.2f%s%.2f\n",i OFS,avg[i]/(a[i]*3),OFS,sum[i] }' file

输出(第2列-平均值值,第3列-总和 值):

B5678 0.27 5.14
A1234 0.39 7.88
awk '{a[]+=;b[]+=;c[]+=;d[]+=;e[]+=;f[]++} END{for (i in a) print i,a[i]/f[i],b[i]/f[i],c[i]/f[i],d[i],e[i]}' file

O/p:

B5678 0.222667 0.283 0.303333 2.445 2.697
A1234 0.53725 0.21375 0.41525 3.653 4.232