下面我试着让这个awk脚本显示每个考试的平均水平以及考试本身的平均水平。我知道这是一个关于如何执行每一行代码的问题。这就是我想要的样子:
姓名考试1考试2考试3考试4平均
乔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 = ($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 ""}
发布于 2021-03-16 00:35:02
你需要这个剧本。您可以将其保存为: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 = ($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
。
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
https://stackoverflow.com/questions/66641605
复制相似问题