Listing 3

BEGIN {
   # (1)
   FCOUNT=0
   OCOUNT=0
   VCOUNT=0
   COUNT=0
   SHORTS=0
   ERRORS=0
   printf "Parsing inventory file \"%s\"\n",
      FILENAME
   print
"=================================================="
}
{
   # (2)
   if(length($0) == 0) next

   # (3)
   if(NF != 3) {
      printf "Bad data encountered: %s\n", $0
      ++ERRORS
      next
   }

   # (4)
   ++COUNT
   # (5)
   if($1 == "fruit") {
      ++FCOUNT
   }
   else if($1 == "vegetable") {
      ++VCOUNT
   }
   else {
      ++OCOUNT
   }

   # (6)
   # if inventory < 5, flag it as a shortage
   if($3 < 5) {
      ++SHORTS
      printf "Short on %s: %d left\n", $2, $3
   }
}
END {
   # (7)
   print
"================================================="
   printf "%d out of %d entries were of type %s.\n",
      FCOUNT, COUNT, "Fruit"
   printf "%d out of %d entries were of type %s.\n",
      VCOUNT, COUNT, "Vegetable"
   printf "%d out of %d entries were of type %s.\n",
      OCOUNT, COUNT, "Other"
   print ""
   printf
   "%d out of %d entries were flagged as bad data.\n",
   ERRORS, COUNT,<\n>
   printf
   "%d out of %d entries were flagged in short supply.\n",
   SHORTS, COUNT
}