clm5/test/tools/show_var_diffs.sh
2024-05-09 15:14:01 +08:00

79 lines
2.5 KiB
Bash

#!/bin/bash
# This script processes a log file that was output by test_driver,
# giving lists of all variables with differences in values (those with
# RMS errors), and all variables with differences in fill patterns.
#
# This assumes that the log file contains output like:
# RMS foo
# RMS bar
# FILLDIFF foo
# FILLDIFF bar
# Some characteristics of these output lines are:
# - they begin with a leading space, followed by RMS or FILLDIFF
# - the variable name is in the second column of the line
#
# Note that (as of 4-5-12) the log file only contains output from the
# last file that didn't match, so this could potentially miss
# something -- especially if there are both h0 and h1 files in the
# comparison.
# Usage: show_var_diffs logfile
# ----------------------------------------------------------------------
# LOCAL FUNCTIONS DEFINED HERE
# ----------------------------------------------------------------------
# This function shows the differences for one prefix (e.g., "RMS")
# Usage: show_diffs prefix
# (also uses $logfile from the parent script)
#
# Matches lines that start with the regular expression "^ ${prefix}"
# (note that one leading space is expected before the prefix)
#
# Assumes that the variable name is in the second column of matching lines
function show_diffs {
prefix=$1
# first determine if there were warnings relating to this prefix
grep "WARNING: Too many instances of ${prefix}" $logfile > /dev/null
if [ $? -eq 0 ]; then # found a warning
echo "WARNING: Some output was truncated; this may not be a complete list"
fi
# now make a list of all variables matching this prefix
grep "^ ${prefix}" $logfile > $logfile.tmp.$$
if [ $? -eq 0 ]; then
awk '{print $2}' $logfile.tmp.$$ | sort | uniq
else
echo "(no differences)"
fi
rm $logfile.tmp.$$
}
# ----------------------------------------------------------------------
# BEGIN MAIN SCRIPT
# ----------------------------------------------------------------------
# ----------------------------------------------------------------------
# Handle command-line arguments
# ----------------------------------------------------------------------
if [[ $# -ne 1 ]]; then
echo "Usage: show_var_diffs logfile"
exit 1
fi
logfile=$1
# ----------------------------------------------------------------------
# Do the processing
# ----------------------------------------------------------------------
echo "Variables with differences in values:"
show_diffs "RMS"
echo ""
echo "Variables with differences in fill patterns:"
show_diffs "FILLDIFF"