首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >帮助格式化列平均值的AWK脚本

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

Stack Overflow用户
提问于 2021-03-15 16:09:58
回答 1查看 46关注 0票数 1

下面我试着让这个awk脚本显示每个考试的平均水平以及考试本身的平均水平。我知道这是一个关于如何执行每一行代码的问题。这就是我想要的样子:

姓名考试1考试2考试3考试4平均

乔0.0 75 87 91

约翰0.0 86 72 83

考试1平均: 0.0

考试2平均: 80.5

考试3平均: 79.5

代码语言:javascript
运行
复制
#!/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 = ($3 + $4 + $5) / 4;                                                           
    printf "%s \t %28s %7s %7s %7s %7.1f\n", $1, "0", $3, $4, $5,examSTUAVG                    
                                                                                               
    {exam2Total += $3}                                                                         
    {exam3Total += $4}                                                                         
    {exam4Total += $5}                                                                         
    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 ""}   
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-16 00:35:02

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

代码语言:javascript
运行
复制
#!/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 = ($3 + $4 + $5) / 4;                                                           
        printf "%s \t %28s %7s %7s %7s %7.1f\n", $1,$2, $3, $4, $5,examSTUAVG                    

        {exam1Total += $2}                                                                         
        {exam2Total += $3}                                                                         
        {exam3Total += $4}                                                                         
        {exam4Total += $5}                                                                         
    }                                                                                              
}
                                                                                               
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

代码语言:javascript
运行
复制
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

我得到了这个输出:

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66641605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档