rendered paste body#! bin/sh
BEGIN{
grade_type_count=1 #counter for !lines
#type_arr[]
#max_val_arr[]
#scale_arr[]
#quant_arr[]
#name_arr[]
header="!"
number_of_students=1
#student_names_arr[]
#student_avg[]
#error_grade_type[]
#error_grade_val[]
#error_num_of_grades[]
error=0
}
#line by line
{
if($1 == header)
{
print "Step 1 start"
type_arr[grade_type_count]=$2
max_val_arr[grade_type_count]=$3
scale_arr[grade_type_count]=$4
quant_arr[grade_type_count]=$5
name_arr[grade_type_count]=$6
grade_type_count++
print "Step 1 complete"
}
else
{
print "Step 2"
print NF
#for(i=1; i <= NF; i++)
i=1
while(i <= NF)
{
print "I should be printed twice at least"
if(i==1)
{
student_names_arr[number_of_students]=$i
$name=$i
print $name
i++
print i
}
else
{
print "Step 2.4"
j=0
quantity=1
num_test_types=grade_type_count
while($i != type_arr[j] && j<= num_test_types)
{
j++
}
print i, " is the field being worked on"
if($i!= type_arr[j])
{
printf "error: non-matching test type found."
error_grade_type[i]=1
error=1
}
else
{
$test_type=$i
i++
if($i > $max_val_arr[j])
{
printf "error: out of range grade value"
error_grade_val[i]=1
error=1
}
else
{
for(m=0; type_arr[m] != $i; i++)
{
$name[num_test_types]+=$i
}
}
}
}
print i
}#end of for loop
print "Step 2 complete"
}#end of else statement
}#end of line by line
END {
#avg_test_scores_arr[]
format = "%-10 %s\n"
printf format, "Name", "Average", "Grade" #needs cool spacy things
printf format, "----", "-------", "-----"
for(n=0; n < number_of_students; n++)
{
name=""
name=student_names_arr[n];
avg_raw=0
real_avg=0
p=0
letter_grade=""
if(0==error_grade_type[n] && 0==error_grade_val)
{
for(p; p<number_of_students; p++) #redesign
{
temp_raw=$name[p]
avg_raw+=temp_raw*scale_arr[p]
}
real_avg=avg_raw/total_num_of_grades
if(real_avg>=95)
letter_grade="A+"
else if(real_avg>=92)
letter_grade="A"
else if(real_avg>=90)
letter_grade="A-"
else if(real_avg>=88)
letter_grade="B+"
else if(real_avg>=85)
letter_grade="B"
else if(real_avg>=80)
letter_grade="B-"
else if(real_avg>=78)
letter_grade="C+"
else if(real_avg>=75)
letter_grade="C"
else if(real_avg>=70)
letter_grade="C-"
else if(real_avg>=60)
letter_grade="D"
else
letter_grade="F"
printf format, name, real_avg, letter_grade
}
else
{
if(1==error_grade_type[n])
printf format, name, "** Unknown Grade Type **"
else
printf format, name, "** Value greater than Maximun **"
}
}
for(r=0; r<=grade_type_count; r++)
{
for(s=1; s<=number_of_students; s++)
{
temp_name=student_names_arr[s]
avg_test_scores_arr[r]+=$temp_name[r]
}
avg_test_score_arr[r]=avg_test_score_arr[r] / (number_of_students*quant[r])
}
printf "\n"
printf "Number of Students = " number_of_students #check logic for variable numofstudents
if(0==error)
{
for(t=1; t<=grade_type_count; t++) #last for loop!!
{
printf "Avg type_arr[t] Score = avg_test_scores_arr[t]"
}
overall_score=0
for(u=1; u<=grade_type_count; u++)
{
overall_score=+avg_test_scores_arr[u]
}
overall_score= overall_score/(grade_type_count+1)
printf "Avg Overall Score = overall_score"
}
else
{
printf "CLASS AVERAGES NOT COMPUTED BECAUSE OF ERRORS"
}
}#end of END statement