#! 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=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