diff --git a/Lab 1 - Group Work/grade.sh b/Lab 1 - Group Work/grade.sh new file mode 100644 index 0000000..2188ced --- /dev/null +++ b/Lab 1 - Group Work/grade.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash +set -euo pipefail + +AUTOGRADE_DIR="${1:-lab1_files/autograde}" +STUDENTS_FILE="$AUTOGRADE_DIR/students.txt" +APPEND_FILE="$AUTOGRADE_DIR/GRADING/APPEND.py" + +[[ -f "$STUDENTS_FILE" ]] || { echo "students.txt missing"; exit 1; } +[[ -f "$APPEND_FILE" ]] || { echo "APPEND.py missing"; exit 1; } + +mapfile -t IDS < <( + find "$AUTOGRADE_DIR" -mindepth 1 -maxdepth 1 -type d \ + ! -name GRADING ! -name "__MACOSX" -printf '%f\n' | sort +) + +lookup_name() { + local id="$1" + awk -v id="$id" ' + $1==id { + last=$NF + first="" + for(i=2;i "$outfile" <> "$graded" + + set +e + output="$(python3 "$graded" 2>&1)" + set -e + + { + echo + echo "---- AUTOGRADE OUTPUT ----" + echo "$output" + echo "---- END AUTOGRADE OUTPUT ----" + } >> "$outfile" + + score="$(echo "$output" | tail -n 1 | grep -Eo '[0-9]+[[:space:]]*/[[:space:]]*[0-9]+' || echo N/A)" + sed -i.bak "s/STUDENT_SCORE/$score/" "$outfile" && rm "$outfile.bak" + + echo "Graded $id" +done + +echo "Grading complete."