#!/usr/bin/env -S awk -f function between(x, l, h) { return (x >= l) && (x <= h) } BEGIN { eyecolor[1] = "amb" eyecolor[2] = "blu" eyecolor[3] = "brn" eyecolor[4] = "gry" eyecolor[5] = "grn" eyecolor[6] = "hzl" eyecolor[7] = "oth" } length == 0 { valid = 1 if (!(between(fields["byr"], 1920, 2002) && between(fields["iyr"], 2010, 2020) && between(fields["eyr"], 2020, 2030) && length(fields["pid"]) == 9)) valid = 0 else { # Test eyecolor valid = 0 for (i in eyecolor) { if (fields["ecl"] == eyecolor[i]) { valid = 1 break } } # Test height split(fields["hgt"], height, "[^0-9]") if ((fields["hgt"] ~ "cm" && !between(height[1], 150, 193)) || (fields["hgt"] ~ "in" && !between(height[1], 59, 76)) || (fields["hgt"] !~ "cm|in")) valid = 0 # Test haircolor if (fields["hcl"] !~ "^#[0-9a-f]{6}") valid = 0 } if (valid == 1) count++ fields["byr"] = "" fields["iyr"] = "" fields["eyr"] = "" fields["hgt"] = "" fields["hcl"] = "" fields["ecl"] = "" fields["pid"] = "" next } # Non-blank lines { for (i = 1; i <= NF; i++) { split($i, data, ":") fields[data[1]] = data[2] } } END { print count }