Line 479: |
Line 479: |
| [[image:ScreenInstalling.png]] | | [[image:ScreenInstalling.png]] |
| | | |
− | == Code ==
| |
− |
| |
− | Code (parser.awk) can be downloaded [http://www.filedropper.com/parser here] <br>
| |
− | Date file (students.dat) can be downloaded [http://www.filedropper.com/students here]
| |
− | <br>
| |
− | <br>
| |
− |
| |
− | With data in the same directory and with your PWD also as the same directory.
| |
− | Issue the command @ the command line:
| |
− | <pre>awk -f parser.awk students.dat</pre>
| |
− |
| |
− |
| |
− | <br>
| |
− | '''Parser.awk:'''
| |
− | <pre>
| |
− | #Wesley Dillingham
| |
− | #Filename parser.awk
| |
− | #Last updated May 17th 2009
| |
− |
| |
− | BEGIN{
| |
− | printf("%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n", "Student", "Only +", "Contains +", "Only -", "Contains -", "Only
| |
− | *", "Contains *", "Only /", "Contains /", "Understands OoO?")
| |
− | }
| |
− |
| |
− | {
| |
− | #*****Field Reference *************
| |
− |
| |
− | #MAC=$1
| |
− | #NAME=$2
| |
− | #OPERATION=$3
| |
− | #SUCCESS=$4
| |
− |
| |
− | #************************************
| |
− |
| |
− | #Because in the end statement we will have to loop through one of the arrays, which will be localized according
| |
− | #to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a
| |
− | #question with one of these operations, and if we looped through that particular operation, we would not represent
| |
− | #that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array
| |
− | #which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.
| |
− | CLASS[$2]
| |
− |
| |
− | #any line that has division, but not necessarily just.
| |
− | if ( match($3, /\//) )
| |
− | {
| |
− | #How many division problem student $2 encounters = divison[$2]
| |
− | division[$2]++
| |
− |
| |
− | if ( $4 == "1" )
| |
− | {
| |
− | division_correct[$2]++
| |
− | }
| |
− | }
| |
− |
| |
− | #any line with multiplication but not neccearily just multiplication
| |
− | if ( match($3, /\*/) )
| |
− | {
| |
− | #How many multiplication problem student $2 encounters = multiplication[$2]
| |
− | multiplication[$2]++
| |
− |
| |
− | if ( $4 == "1" )
| |
− | {
| |
− | multiplication_correct[$2]++
| |
− | }
| |
− |
| |
− | }
| |
− |
| |
− | #any line with addition but not necessarily just addition
| |
− | if ( match($3, /\+/) )
| |
− | {
| |
− | #How many addition problem student $2 encounters = addition[$2]
| |
− | addition[$2]++
| |
− |
| |
− | if ( $4 == "1" )
| |
− | {
| |
− | addition_correct[$2]++
| |
− | }
| |
− | }
| |
− |
| |
− | #contains subtractions, excludes negative numbers, as it only matches expressions with a "-" sandwiched b/w two digits
| |
− | if ( match($3, /[0-9]\-[0-9]/) )
| |
− | {
| |
− | #How many subtraction problem student $2 encounters = subtraction[$2]
| |
− | subtraction[$2]++
| |
− |
| |
− | if ( $4 == "1" )
| |
− | {
| |
− | subtraction_correct[$2]++
| |
− | }
| |
− | }
| |
− |
| |
− |
| |
− |
| |
− | # Matches operations with ONLY DIVISION
| |
− | if ( match($3, /\//) && !match($3, /[0-9]\-[0-9]/) && !match($3, /\+/) && !match($3, /\*/) )
| |
− | {
| |
− |
| |
− | #How many ONLY division problem student $2 encounters = 0_divison[$2]
| |
− | o_division[$2]++
| |
− |
| |
− | if ( $4 == "1" )
| |
− | {
| |
− | o_division_correct[$2]++
| |
− | }
| |
− |
| |
− |
| |
− | }
| |
− |
| |
− | # Matches operations with ONLY SUBTRACTION
| |
− | if ( !match($3, /\//) && match($3, /[0-9]\-[0-9]/) && !match($3, /\+/) && !match($3, /\*/) )
| |
− | {
| |
− | #How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]
| |
− | o_subtraction[$2]++
| |
− |
| |
− | if ( $4 == "1" )
| |
− | {
| |
− | o_subtraction_correct[$2]++
| |
− | }
| |
− |
| |
− | }
| |
− |
| |
− | # Matches operations with ONLY ADDITION
| |
− | if ( !match($3, /\//) && !match($3, /[0-9]\-[0-9]/) && match($3, /\+/) && !match($3, /\*/) )
| |
− | {
| |
− | #How many ONLY Addition problem student $2 encounters = o_addition[$2]
| |
− | o_addition[$2]++
| |
− |
| |
− | if ( $4 == "1" )
| |
− | {
| |
− | o_addition_correct[$2]++
| |
− | }
| |
− |
| |
− | }
| |
− |
| |
− | # Matches operations with ONLY MULTIPLICATION
| |
− | if ( !match($3, /\//) && !match($3, /[0-9]\-[0-9]/) && !match($3, /\+/) && match($3, /\*/) )
| |
− | {
| |
− | #How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]
| |
− | o_multiplication[$2]++
| |
− |
| |
− | if ( $4 == "1" )
| |
− | {
| |
− | o_multiplication_correct[$2]++
| |
− | }
| |
− |
| |
− | }
| |
− |
| |
− | #How many problems an individual student faced: for classwide statistics we simply use the built-in var NR
| |
− | numproblems[$2]++
| |
− |
| |
− | #Determine if it is a compound operation if so increment by one, this requires 4 if's as we have to check if each of them exists in
| |
− | # conjuntion with another.
| |
− | #Keep track of total compounds and compounds correct.
| |
− | #Else-if structure required because if stringed If's were used each compound match would register twice.
| |
− |
| |
− | if ( match($3, /\//) && ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) )
| |
− | {
| |
− | compound[$2]++
| |
− |
| |
− | if ($4 == "1") #if correct
| |
− | {
| |
− | compound_correct[$2]++
| |
− | }
| |
− | }
| |
− | else if ( match($3, /[0-9]\-[0-9]/) && (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) )
| |
− | {
| |
− | compound[$2]++
| |
− |
| |
− | if ($4 == "1") #if correct
| |
− | {
| |
− | compound_correct[$2]++
| |
− | }
| |
− |
| |
− | }
| |
− | else if ( match($3, /\+/) && ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) )
| |
− | {
| |
− | compound[$2]++
| |
− |
| |
− | if ($4 == "1") #if correct
| |
− | {
| |
− | compound_correct[$2]++
| |
− | }
| |
− | }
| |
− | else if ( match($3, /\*/) && ( match($3, /\+/) || match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) )
| |
− | {
| |
− | compound[$2]++
| |
− |
| |
− | if ($4 == "1") #if correct
| |
− | {
| |
− | compound_correct[$2]++
| |
− | }
| |
− |
| |
− | }
| |
− | else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements.
| |
− | {
| |
− |
| |
− | non_compound[$2]++
| |
− |
| |
− | if ($4 == "1") #if correct
| |
− | {
| |
− | non_compound_correct[$2]++
| |
− | }
| |
− |
| |
− | }
| |
− |
| |
− |
| |
− | if ( $4 == "1" )
| |
− | {totalcorrect[$2]++}
| |
− |
| |
− | }#end of AWK_MAIN
| |
− | END{
| |
− |
| |
− |
| |
− |
| |
− | #loops through all of the elements in the array CLASS[]
| |
− | #Here We will print out the students
| |
− |
| |
− | for (student in CLASS)
| |
− | {
| |
− |
| |
− | # A student doesnt understand order of operations if their is a greater than 20% difference in between compound
| |
− | # operations and single operation instructions, but only if lower on the compound instruction side.
| |
− | # or if they get less than 70% on compounds, because getting a 51% on compounds and 70% on non compounds doesnt satisfy
| |
− | # understaning of OoO
| |
− |
| |
− | if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) > .2 ) ||
| |
− | ( (non_compound_correct[student] / non_compound[student]) ) < .7)
| |
− | {
| |
− | understands= "no"
| |
− | }
| |
− | else
| |
− | {
| |
− | understands= "yes"
| |
− | }
| |
− |
| |
− |
| |
− | #need to address divide by 0 issue
| |
− | printf("%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n", student,
| |
− | int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),
| |
− | int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),
| |
− | int(o_multiplication_correct[student]*100/o_multiplication[student]),
| |
− | int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),
| |
− | int(division_correct[student]*100/division[student]), understands)
| |
− |
| |
− |
| |
− |
| |
− | }
| |
− |
| |
− | } #end of AWK_END
| |
− |
| |
− |
| |
− |
| |
− | </pre>
| |
| | | |
| ==After Class Plans== | | ==After Class Plans== |