| #!/bin/bash | 
 |  | 
 | CSV=FALSE | 
 |  | 
 | while getopts "c" name | 
 | do | 
 |   case $name in | 
 |     c)  CSV=TRUE;; | 
 |   esac | 
 | done | 
 | shift $(( OPTIND - 1 )) | 
 |  | 
 | if [ $# -gt 1 ] | 
 | then | 
 |   echo "usage:  $(basename $0) [ <options> ] [ <filename> ]" >&2 | 
 |   echo "options: -c for CSV format" >&2 | 
 |   exit 1 | 
 | fi | 
 |  | 
 | # If the -c option is called, the option index is shifted over once and the | 
 | # value of the option is stored in $FILE. The default behavior is that the sed | 
 | # transform will read from standard input if no argument is provided and $FILE | 
 | # will be empty. | 
 | FILE=$1 | 
 |  | 
 | SED_SCRIPT=" | 
 |     s/ CHROMEOS_RELEASE_VERSION=[^ ]*// | 
 |     s/ BOARD=[^ ]*// | 
 |   " | 
 |  | 
 | if [ $CSV = "TRUE" ] | 
 | then | 
 |   echo "Location,Status,Fixed,Comments" | 
 |   SED_SCRIPT=" | 
 |       s/ ...[A-Z]*// | 
 |       $SED_SCRIPT | 
 |       s/ /,/ | 
 |       s/$/,,/ | 
 |     " | 
 |   sed "$SED_SCRIPT" $FILE | 
 |  | 
 | else | 
 |   SED_SCRIPT=" | 
 |       s/^[^ ]* ...[A-Z]* // | 
 |       $SED_SCRIPT | 
 |       s/is up/servod &/ | 
 |       s/.*pwr_button:press.*/power button is stuck down/ | 
 |       s/^\(not running servod\) \(not running brillo\)$/\1, \2/ | 
 |       s/^not running servod$/up but not running servod, reason unknown/ | 
 |       s/^servod not configured$/running brillo, BOARD for &/ | 
 |       s/^servod failed$/servod running, but not working/ | 
 |       s/^is down/no answer to ping/ | 
 |       s/^\(not running servod\) \(ssh is down\)$/\1, ping is up, \2/ | 
 |     " | 
 |   sed "$SED_SCRIPT" $FILE | sort | uniq -c | | 
 |     awk '{ print ; sum += $1 } END { printf "%7d total\n", sum }' | | 
 |       sort | cut -c -72 | 
 | fi |