--- MITgcm_contrib/jmc_script/extract_StD 2006/01/07 16:23:29 1.1 +++ MITgcm_contrib/jmc_script/extract_StD 2008/05/29 23:47:13 1.3 @@ -1,40 +1,78 @@ #!/bin/sh + +# $Header: /home/ubuntu/mnt/e9_copy/MITgcm_contrib/jmc_script/extract_StD,v 1.3 2008/05/29 23:47:13 jmc Exp $ +# $Name: $ + +add=0 ; mut=0 ; +if [ $# -ge 3 ] +then + if test $1 = '-a' ; then add=1; shift; fi + if test $1 = '-s' ; then mut=1; shift; fi + if test $add = 0 ; then if test $1 = '-a' ; then add=1; shift; fi ; fi +fi + case $# in - 0|1) echo "Usage: `basename $0` input_fil outp_sufix [field_name_list]" +0|1|2) echo "Usage: `basename $0` [-a][-s] input_fil out_pfix out_sfix [field_name_list]" echo " from ASCII Diagnostics-Stats file (=input_fil) and for each field" echo " (in field_name_list), extract the associated numerical values and" - echo " put them in a separated file: stDiag_{VAR}.{outp_sufix}" + echo " put them in a separated file: {out_pfix}_{VAR}.{out_sfix}" + echo " -a : append to output_file ; -s : silent mode " + echo " '=' as out_pfix -> take {input_fil} basename " exit 9 ;; - 2) listV='T' ;; *) ;; esac inpFil=$1 -#outFil=$2 -sufx=$2 +if test $2 = '=' +then prfx=`basename $inpFil | sed 's/\..*\.txt//'` +else prfx=$2 ; fi +sufx=$3 tmpFil='TTT.'$$ -if test $# = '2' -then listV='T' +tmpfil='ttt.'$$ + +echo 'output pre,sufix:' $prfx','$sufx '; input file:' $inpFil +if test $# = '3' +then listV=`sed -n '/^# Fields /s/# Fields ://p' $inpFil` else - shift; shift; listV=$* + shift; shift; shift; listV=$* +fi +if test $mut = 0 ; then + grep '^# Fields ' $inpFil + echo 'selected var:' $listV +#echo 'sufx, tmpFil:' $sufx $tmpFil fi -echo $inpFil $sufx $listV $tmpFil -grep '^# Fields ' $inpFil +flag=1; for vv in $listV do - outFil='stDiag_'$vv.$sufx case $vv in - 'Eta') var='ETAN';; - 'Et2') var='ETANSQ';; - 'T') var='THETA';; - 'S') var='SALT' ;; - 'U') var='UVEL' ;; - 'V') var='VVEL' ;; - 'W') var='WVEL' ;; - 'U2') var='UVELSQ' ;; - 'V2') var='VVELSQ' ;; - *) var=$vv ;; + 'Eta') var='ETAN' ; vfl=$vv ;; + 'ETAN' ) var=$vv ; vfl='Eta';; + 'T') var='THETA' ; vfl=$vv ;; + 'THETA' ) var=$vv ; vfl='T' ;; + 'S') var='SALT' ; vfl=$vv ;; + 'SALT' ) var=$vv ; vfl='S' ;; + 'U') var='UVEL' ; vfl=$vv ;; + 'UVEL' ) var=$vv ; vfl='U' ;; + 'V') var='VVEL' ; vfl=$vv ;; + 'VVEL' ) var=$vv ; vfl='V' ;; + 'W') var='WVEL' ; vfl=$vv ;; + 'WVEL' ) var=$vv ; vfl='W' ;; + 'Phi') var='PHIHYD' ; vfl=$vv ;; + 'PHIHYD' ) var=$vv ; vfl='Phi';; + 'Et2') var='ETANSQ' ; vfl=$vv ;; + 'ETANSQ' ) var=$vv ; vfl='Et2';; + 'T2') var='THETASQ' ; vfl=$vv ;; + 'THETASQ' ) var=$vv ; vfl='T2' ;; + 'S2') var='SALTSQ' ; vfl=$vv ;; + 'SALTSQ' ) var=$vv ; vfl='S2' ;; + 'U2') var='UVELSQ' ; vfl=$vv ;; + 'UVELSQ' ) var=$vv ; vfl='U2' ;; + 'V2') var='VVELSQ' ; vfl=$vv ;; + 'VVELSQ' ) var=$vv ; vfl='V2' ;; + 'W2') var='WVELSQ' ; vfl=$vv ;; + 'WVELSQ' ) var=$vv ; vfl='W2' ;; + *) var=$vv ; vfl=$vv ;; esac #echo 'grep -m 1' "^ field : ${var} " $inpFil #grep -m 1 "^ field : ${var} " $inpFil @@ -43,8 +81,40 @@ then echo 'WARNING variable:' $var 'not found in file' $inpFil else - echo 'extract variable:' $var ', outFil=' $outFil #echo 'nLev=' $nLev +#- first variable: extract Header, then Iter Numbers: + if test $flag = 1 + then flag=0 + outFil=${prfx}'_head'.$sufx + nLin=`sed -n "/^# end of header/=" $inpFil` + head -$nLin $inpFil > $tmpFil + if test -f $outFil -a $add = 0 ; then rm -f $outFil ; fi + if test -f $outFil + then + diff $tmpFil $outFil > /dev/null + out=$? + if test $out != '0' + then + echo 'WARNNING : get Different header file:' $outFil + cat $tmpFil >> $outFil + fi + rm -f $tmpFil + else mv $tmpFil $outFil + if test $mut = 0 ; then echo 'extract Header (' $nLin 'lines ) ==> ' $outFil ; fi + fi +#---- + outFil=${prfx}'_Iter'.$sufx + if test $mut = 0 ; then echo 'extract Iteration Nb ==> outFil=' $outFil ; fi + if test -f $outFil -a $add = 0 ; then rm -f $outFil ; fi + touch $outFil + rList=`sed -n '/^# Regions /s/# Regions ://p' $inpFil` + for j in $rList ; do jj=$j ; done + grep "^ field : ${var} " $inpFil | grep "$j ; nb.Lev =" | \ + sed 's/.*Iter =//' | sed 's/; region.*//g' >> $outFil + fi +#---- + outFil=${prfx}'_'$vfl.$sufx + if test $mut = 0 ; then echo 'extract variable:' $var ', outFil=' $outFil ; fi #- echo set of sed instruction to file sedFil : sedFil=$tmpFil.$vv rm -f $sedFil @@ -59,8 +129,10 @@ echo "}" >> $sedFil #- extract records of variable "var" using sed command & sedFil sed -n -f $sedFil $inpFil > $tmpFil - head -1 $tmpFil - sed '/^ k /d' $tmpFil | sed '/^ field /d' > $outFil + if test $mut = 0 ; then head -1 $tmpFil ; fi + if test -f $outFil -a $add = 0 ; then rm -f $outFil ; fi + touch $outFil + sed '/^ k /d' $tmpFil | sed '/^ field /d' >> $outFil rm -f $sedFil $tmpFil fi done