帮助格式化列平均值的 AWK 脚本

AWK script to help format averages of column

下面我试图让这个 awk 脚本显示每个单独的考试平均分以及考试本身的平均分。我知道每行代码的执行方式与放置位置有关。这就是我需要的样子:

姓名 Exam 1 Exam 2 Exam 3 Exam 4 Average

乔 0.0 75 87 91
约翰 0.0 86 72 83

考试 1 平均分:0.0

考试 2 平均分:80.5

考试 3 平均分:79.5

#!/usr/bin/awk -f                                                                              
                                                                                               
NR == 1{                                                                                       
    printf "%s \t %28s %7s %7s %7s %7s\n", "Name", "Exam 1", "Exam 2", "Exam 3", "Exam 4", "Av\
erage"                                                                                         
}                                                                                              
                                                                                               
                                                                                               
{                                                                                              
    examSTUAVG = ( +  + ) / 4;                                                           
    printf "%s \t %28s %7s %7s %7s %7.1f\n", , "0", , , ,examSTUAVG                    
                                                                                               
    {exam2Total += }                                                                         
    {exam3Total += }                                                                         
    {exam4Total += }                                                                         
    printf "Exam 1 Average is %19s\n", "0.0"                                                   
    printf "Exam 2 Average is %19.1f\n", exam2Total / NR                                       
    printf "Exam 3 Average is %19.1f\n", exam3Total / NR                                       
    printf "Exam 4 Average is %19.1f\n", exam4Total / NR                                       
}                                                                                              
                                                                                               
{ print ""}   

你需要这个脚本。您可以将其另存为:program.awk。我添加了 END 块用于在最终打印平均值。

#!/usr/bin/awk -f    
{                                                                                                                                                                      
    if(NR == 1){                                                                                       
        printf "%s \t %28s %7s %7s %7s %7s\n", "Name", "Exam 1", "Exam 2", "Exam 3", "Exam 4", "Average"   
    }                                                                                                                                                                               
    else{                                                                                              
        examSTUAVG = ( +  + ) / 4;                                                           
        printf "%s \t %28s %7s %7s %7s %7.1f\n", ,, , , ,examSTUAVG                    

        {exam1Total += }                                                                         
        {exam2Total += }                                                                         
        {exam3Total += }                                                                         
        {exam4Total += }                                                                         
    }                                                                                              
}
                                                                                               
END{    
    myrows=NR-1
    printf "Exam 1 Average is %19.1f\n", exam1Total / myrows
    printf "Exam 2 Average is %19.1f\n", exam2Total / myrows                                       
    printf "Exam 3 Average is %19.1f\n", exam3Total / myrows
    printf "Exam 4 Average is %19.1f\n", exam4Total / myrows                                    
} 

输入的是文件data.txt.

Name Exam 1 Exam 2 Exam 3 Exam 4 Average

Joe 0.0 75 87 91
John 0.0 86 72 83

并执行为:

./program.awk data.txt

我得到了这个输出:

Name                           Exam 1  Exam 2  Exam 3  Exam 4 Average
Joe                               0.0      75      87      91    63.2
John                              0.0      86      72      83    60.2
Exam 1 Average is                 0.0
Exam 2 Average is                80.5
Exam 3 Average is                79.5
Exam 4 Average is                87.0