Listing 4

BEGIN {
   # define input field delimiter as :
   FS=":"
   # Initialize
   BSCOUNT=0
   CSCOUNT=0
   KSCOUNT=0
   OSCOUNT=0
   TOTAL=0
   # Heading
   print "--------------"
   print "Parsing user info from FILENAME"
   print "--------------"
}

{
   # ignore system entries without login shells
   if(length($7) == 0) {
      printf "Skipping: %s\n", $0
      next
   }

   TOTAL++
   # Examine 7th field in record
   if( index($7, "/sh") > 0)
      ++BSCOUNT
   else if( index($7, "/ksh") > 0)
      ++KSCOUNT
   else if( index($7, "/csh") > 0)
      ++CSCOUNT
   else
      ++OSCOUNT
}

END {
# Print out summaries
   print "==========="
   if(TOTAL > 0) {
    printf "Bourne Shell: %d Users %.0f %%\n",
          BSCOUNT, (BSCOUNT / TOTAL) * 100
    printf "Korn Shell: %d Users %.0f %%\n",
          KSCOUNT, (KSCOUNT / TOTAL) * 100
    printf "C Shell: %d Users %.0f %%\n",
          CSCOUNT, (CSCOUNT / TOTAL) * 100
    printf "Other Shell: %d Users %.0f %%\n",
          OSCOUNT, (OSCOUNT / TOTAL) * 100
   }
   print "-----------"
   printf "Total Number of users polled: %d\n",
      TOTAL
   print "============="
}