college/Summer-2024/CS-3424/Quizzes/Quiz-5/Assignment.typ

142 lines
4.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#set text(font: "FreeSans")
#set page(margin: 1cm)
#show link: item => [
#text(blue)[#item]
]
#show raw: set text(font: "Fira Code")
#show raw.where(block: false): item => {
box(inset: (x: 1pt))[#box(
stroke: luma(40%) + .1pt,
fill: luma(97%),
outset: (y: 3pt, x: 1pt),
radius: 2pt,
)[#item]]
}
#show raw.where(block: true): item => {
set par(leading: .5em, justify: false)
align(center)[
#block(
outset: 0pt,
stroke: luma(40%) + .5pt,
fill: luma(97%),
radius: 3pt,
)[
#align(left)[#rect(
radius: (
top-left: 3pt,
bottom-right: 3pt,
),
inset: .3em,
stroke: (
bottom: luma(40%) + .5pt,
right: luma(40%) + .5pt,
),
fill: blue.transparentize(95%),
)[#text(fill: blue)[#item.lang]]]
#v(-1em)
#box(inset: 4pt)[#item]
]]
}
#let answer(ans) = {
set text(size: .95em, style: "italic", fill: rgb(64, 90, 95))
block(
inset: 4pt,
stroke: blue + .5pt,
fill: rgb(0, 149, 255, 5%),
radius: 3pt,
)[#for child in ans.fields().children {
if child.func() == raw {
text(fill: black)[#child]
} else {
child
}
}
]
}
#align(center)[#text(size: 1.3em)[= CS 3424 Quiz - Week 8]]
#align(center)[
#("Price Hiller", "zfp106", "Quiz 5", "CS 3424").join(" ⋄ ")
#v(-.5em)
#text(size: 0.8em)[#block(
inset: 4pt,
radius: 1pt,
stroke: luma(40%) + .2pt,
width: 40%,
fill: luma(97%),
)[#par(leading: .4em)[If you are interested in viewing the source code of this document, you can do so
by clicking
#link(
"https://git.orion-technologies.io/Price/college/src/branch/Development/Summer-2024/CS-3424/Quizzes/Quiz-5/Assignment.typ",
"here.",
)]]]
#v(-.5em)
#line(length: 100%, stroke: (dash: "densely-dotted"))
#v(-.5em)
]
1. Given the list of grades, `grades.txt`, for the input file below, create an `awk` script, `quiz.awk`, which prints only the students name (first then last), grade, and assignment for the section passed as an argument. At the end, print the average grade and the number of failing grades (<= 60) for the specified section. Each line in the input file contains the following fields in this order: *lastName, firstName, section, assignment, grade*. Assume names do not have spaces. Print the output to a file called `gradesFiltered.txt`.
```sample
Adams John 2 1 30
Addams Gomez 3 3 80
Allen Tim 2 1 90
Ball Lucille 3 2 76
Buscemi Steve 3 1 80
Busey Gary 1 3 43
Cage Nicolas 2 5 110
```
#answer[
The script below assumes it will be run via `awk -f <awk-script-here> -v 'section=3' ./grades.txt`.
```awk
BEGIN {
if (!section) {
print "`section` variable was not passed, pass it via `-v 'section=<SECTION_NUM_HERE>'`" > "/dev/stderr"
exit 1
}
students_in_section=0
number_failing_grades=0
}
{
student_last_name=$1
student_first_name=$2
student_section=$3
student_assignment=$4
student_grade=$5
if (student_section == section) {
print student_first_name,student_last_name,student_grade,student_assignment > "gradesFiltered.txt"
students_in_section += 1
sum += student_grade
if (student_grade <= 60) {
number_failing_grades+=1
}
}
}
END {
if (students_in_section > 0) {
print "Average grade: " sum / students_in_section > "gradesFiltered.txt"
print "Number of failing grades: " number_failing_grades > "gradesFiltered.txt"
} else {
print "No students found in section: " section > "/dev/stderr"
exit 1
}
}
```
#figure(
box(clip: true, radius: 4pt)[#image(
"assets/awk-script-in-action.png",
height: 55%,
fit: "contain",
alt: "",
)],
caption: [
Image of the provided ```bash awk``` script being ran.
],
)
]