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 |