Pipe the printf through sort:
Code:
awk 'BEGIN {
format = "%-15s%-15s%-15s%-15s%-15s%-15s\n"
printf format, "Name", "Exam1", "Exam2", "Exam 3", "Total", "Grade"
}
{
total = ( $2 + $3 + $4 ) / 3 # I think you want the average
if (total < 50) grade = "F"
else if (total < 65) grade = "D"
else if (total < 80) grade = "C"
else if (total < 90) grade = "B"
else grade="A"
format = "%-15s%-15s%-15s%-15s%-15d%-15s\n"
printf format, $1, $2, $3, $4, total, grade | "sort"
} ' grades > gradesorted