| 1 |
#! /usr/bin/env bash |
| 2 |
|
| 3 |
# $Header: /u/gcmpack/MITgcm_contrib/jmc_script/extract_StD,v 1.3 2008/05/29 23:47:13 jmc Exp $ |
| 4 |
# $Name: $ |
| 5 |
|
| 6 |
add=0 ; mut=0 ; |
| 7 |
if [ $# -ge 3 ] |
| 8 |
then |
| 9 |
if test $1 = '-a' ; then add=1; shift; fi |
| 10 |
if test $1 = '-s' ; then mut=1; shift; fi |
| 11 |
if test $add = 0 ; then if test $1 = '-a' ; then add=1; shift; fi ; fi |
| 12 |
fi |
| 13 |
|
| 14 |
case $# in |
| 15 |
0|1|2) echo "Usage: `basename $0` [-a][-s] input_fil out_pfix out_sfix [field_name_list]" |
| 16 |
echo " from ASCII Diagnostics-Stats file (=input_fil) and for each field" |
| 17 |
echo " (in field_name_list), extract the associated numerical values and" |
| 18 |
echo " put them in a separated file: {out_pfix}_{VAR}.{out_sfix}" |
| 19 |
echo " -a : append to output_file ; -s : silent mode " |
| 20 |
echo " '=' as out_pfix -> take {input_fil} basename " |
| 21 |
exit 9 ;; |
| 22 |
*) ;; |
| 23 |
esac |
| 24 |
|
| 25 |
inpFil=$1 |
| 26 |
if test $2 = '=' |
| 27 |
then prfx=`basename $inpFil | sed 's/\..*\.txt//'` |
| 28 |
else prfx=$2 ; fi |
| 29 |
sufx=$3 |
| 30 |
tmpFil='TTT.'$$ |
| 31 |
tmpfil='ttt.'$$ |
| 32 |
|
| 33 |
echo 'output pre,sufix:' $prfx','$sufx '; input file:' $inpFil |
| 34 |
if test $# = '3' |
| 35 |
then listV=`sed -n '/^# Fields /s/# Fields ://p' $inpFil` |
| 36 |
else |
| 37 |
shift; shift; shift; listV=$* |
| 38 |
fi |
| 39 |
if test $mut = 0 ; then |
| 40 |
grep '^# Fields ' $inpFil |
| 41 |
echo 'selected var:' $listV |
| 42 |
#echo 'sufx, tmpFil:' $sufx $tmpFil |
| 43 |
fi |
| 44 |
|
| 45 |
flag=1; |
| 46 |
for vv in $listV |
| 47 |
do |
| 48 |
case $vv in |
| 49 |
'Eta') var='ETAN' ; vfl=$vv ;; |
| 50 |
'ETAN' ) var=$vv ; vfl='Eta';; |
| 51 |
'T') var='THETA' ; vfl=$vv ;; |
| 52 |
'THETA' ) var=$vv ; vfl='T' ;; |
| 53 |
'S') var='SALT' ; vfl=$vv ;; |
| 54 |
'SALT' ) var=$vv ; vfl='S' ;; |
| 55 |
'U') var='UVEL' ; vfl=$vv ;; |
| 56 |
'UVEL' ) var=$vv ; vfl='U' ;; |
| 57 |
'V') var='VVEL' ; vfl=$vv ;; |
| 58 |
'VVEL' ) var=$vv ; vfl='V' ;; |
| 59 |
'W') var='WVEL' ; vfl=$vv ;; |
| 60 |
'WVEL' ) var=$vv ; vfl='W' ;; |
| 61 |
'Phi') var='PHIHYD' ; vfl=$vv ;; |
| 62 |
'PHIHYD' ) var=$vv ; vfl='Phi';; |
| 63 |
'Et2') var='ETANSQ' ; vfl=$vv ;; |
| 64 |
'ETANSQ' ) var=$vv ; vfl='Et2';; |
| 65 |
'T2') var='THETASQ' ; vfl=$vv ;; |
| 66 |
'THETASQ' ) var=$vv ; vfl='T2' ;; |
| 67 |
'S2') var='SALTSQ' ; vfl=$vv ;; |
| 68 |
'SALTSQ' ) var=$vv ; vfl='S2' ;; |
| 69 |
'U2') var='UVELSQ' ; vfl=$vv ;; |
| 70 |
'UVELSQ' ) var=$vv ; vfl='U2' ;; |
| 71 |
'V2') var='VVELSQ' ; vfl=$vv ;; |
| 72 |
'VVELSQ' ) var=$vv ; vfl='V2' ;; |
| 73 |
'W2') var='WVELSQ' ; vfl=$vv ;; |
| 74 |
'WVELSQ' ) var=$vv ; vfl='W2' ;; |
| 75 |
*) var=$vv ; vfl=$vv ;; |
| 76 |
esac |
| 77 |
#echo 'grep -m 1' "^ field : ${var} " $inpFil |
| 78 |
#grep -m 1 "^ field : ${var} " $inpFil |
| 79 |
nLev=`grep -m 1 "^ field : ${var} " $inpFil | sed 's/.*=//'` |
| 80 |
if test ${nLev}'xx' = 'xx' |
| 81 |
then |
| 82 |
echo 'WARNING variable:' $var 'not found in file' $inpFil |
| 83 |
else |
| 84 |
#echo 'nLev=' $nLev |
| 85 |
#- first variable: extract Header, then Iter Numbers: |
| 86 |
if test $flag = 1 |
| 87 |
then flag=0 |
| 88 |
outFil=${prfx}'_head'.$sufx |
| 89 |
nLin=`sed -n "/^# end of header/=" $inpFil` |
| 90 |
head -$nLin $inpFil > $tmpFil |
| 91 |
if test -f $outFil -a $add = 0 ; then rm -f $outFil ; fi |
| 92 |
if test -f $outFil |
| 93 |
then |
| 94 |
diff $tmpFil $outFil > /dev/null |
| 95 |
out=$? |
| 96 |
if test $out != '0' |
| 97 |
then |
| 98 |
echo 'WARNNING : get Different header file:' $outFil |
| 99 |
cat $tmpFil >> $outFil |
| 100 |
fi |
| 101 |
rm -f $tmpFil |
| 102 |
else mv $tmpFil $outFil |
| 103 |
if test $mut = 0 ; then echo 'extract Header (' $nLin 'lines ) ==> ' $outFil ; fi |
| 104 |
fi |
| 105 |
#---- |
| 106 |
outFil=${prfx}'_Iter'.$sufx |
| 107 |
if test $mut = 0 ; then echo 'extract Iteration Nb ==> outFil=' $outFil ; fi |
| 108 |
if test -f $outFil -a $add = 0 ; then rm -f $outFil ; fi |
| 109 |
touch $outFil |
| 110 |
rList=`sed -n '/^# Regions /s/# Regions ://p' $inpFil` |
| 111 |
for j in $rList ; do jj=$j ; done |
| 112 |
grep "^ field : ${var} " $inpFil | grep "$j ; nb.Lev =" | \ |
| 113 |
sed 's/.*Iter =//' | sed 's/; region.*//g' >> $outFil |
| 114 |
fi |
| 115 |
#---- |
| 116 |
outFil=${prfx}'_'$vfl.$sufx |
| 117 |
if test $mut = 0 ; then echo 'extract variable:' $var ', outFil=' $outFil ; fi |
| 118 |
#- echo set of sed instruction to file sedFil : |
| 119 |
sedFil=$tmpFil.$vv |
| 120 |
rm -f $sedFil |
| 121 |
echo "/^ field : $var /{" > $sedFil |
| 122 |
if test $nLev = 1 ; then k=0 ; else k=-1 ; fi |
| 123 |
while [ $k -le $nLev ] |
| 124 |
do |
| 125 |
echo "N" >> $sedFil |
| 126 |
k=`expr $k + 1` |
| 127 |
done |
| 128 |
echo "p" >> $sedFil |
| 129 |
echo "}" >> $sedFil |
| 130 |
#- extract records of variable "var" using sed command & sedFil |
| 131 |
sed -n -f $sedFil $inpFil > $tmpFil |
| 132 |
if test $mut = 0 ; then head -1 $tmpFil ; fi |
| 133 |
if test -f $outFil -a $add = 0 ; then rm -f $outFil ; fi |
| 134 |
touch $outFil |
| 135 |
sed '/^ k /d' $tmpFil | sed '/^ field /d' >> $outFil |
| 136 |
rm -f $sedFil $tmpFil |
| 137 |
fi |
| 138 |
done |
| 139 |
exit |