--- /dev/null
+#!/bin/bash
+
+declare -a data
+cur_data=""
+seperator=""
+valid_count=0
+
+required_fields=(byr iyr eyr hgt hcl ecl pid)
+exec 3<input.txt
+
+while read -u 3 line; do
+ if [ "$line" = "" ]; then
+ data+=("$cur_data")
+ seperator=""
+ cur_data=""
+ continue
+ fi
+ cur_data="${cur_data}${seperator}$line"
+ seperator=" "
+done
+
+# on the last line, if cur_data isn't empty, add that to the array
+if [ "$cur_data" != "" ]; then
+ data+=("$cur_data")
+fi
+
+verify_data() {
+ local -n record=$1
+
+ for field in ${required_fields[@]}; do
+ if ! [ ${kvp[$field]+a} ]; then
+ exit 1
+ fi
+ done
+
+ exit 0
+}
+
+for (( i=0; i<${#data[@]}; i++ )); do
+ record="${data[$i]}"
+ declare -A kvp
+ for field in $record; do
+ key=${field%:*}
+ value=${field#*:}
+ kvp[$key]=$value
+ done
+ if ( verify_data kvp ); then
+ valid_count=$((valid_count+1))
+ fi
+ unset kvp
+done
+
+echo "$valid_count valid entries"