1 #
   2 # matching the following output specified as a pattern that verifies
   3 # that the numerical values conform to a specific pattern, rather than
   4 # specific values.
   5 #
   6 #  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC                 
   7 #  0.00   0.00   0.00   9.97  90.94  87.70      2    0.013     0    0.000    0.013 Allocation Failure   No GC
   8 
   9 
  10 BEGIN   {
  11             headerlines=0; datalines=0; totallines=0
  12         }
  13 
  14 /^  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC                 $/ {
  15             headerlines++;
  16         }
  17 
  18 # The following pattern does not verify the validity of the gc cause
  19 # string as the values can vary depending on conditions out of our
  20 # control. To accomodate this variability, the pattern matcher simply
  21 # detects that there are two strings that match a specific pattern
  22 # where the first character is a letter followed by a sequence of zero
  23 # or more letters and spaces. It also provides for the ".", "(", and ")"
  24 # characters to allow for the string "System.gc()".
  25 #
  26 /^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*([0-9]+\.[0-9]+)|-[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[a-zA-Z]+[a-zA-Z \.\(\)]*[ ]*[a-zA-Z]+[a-zA-Z \.\(\)]*$/        {
  27             datalines++;
  28         }
  29 
  30         { totallines++; print $0 }
  31 
  32 END     {
  33             if ((headerlines == 1) && (datalines == 1)) {
  34                 exit 0
  35             }
  36             else {
  37                 exit 1
  38             }
  39         }