帮助格式化列平均值的 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
下面我试图让这个 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