1 |
jmc |
1.4 |
#! /usr/bin/env bash |
2 |
jmc |
1.2 |
|
3 |
jmc |
1.4 |
# $Header: /u/gcmpack/MITgcm_contrib/jmc_script/extract_StD,v 1.3 2008/05/29 23:47:13 jmc Exp $ |
4 |
jmc |
1.2 |
# $Name: $ |
5 |
|
|
|
6 |
|
|
add=0 ; mut=0 ; |
7 |
jmc |
1.4 |
if [ $# -ge 3 ] |
8 |
jmc |
1.2 |
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 |
jmc |
1.1 |
case $# in |
15 |
jmc |
1.2 |
0|1|2) echo "Usage: `basename $0` [-a][-s] input_fil out_pfix out_sfix [field_name_list]" |
16 |
jmc |
1.1 |
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 |
jmc |
1.2 |
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 |
jmc |
1.1 |
exit 9 ;; |
22 |
|
|
*) ;; |
23 |
|
|
esac |
24 |
|
|
|
25 |
|
|
inpFil=$1 |
26 |
jmc |
1.2 |
if test $2 = '=' |
27 |
|
|
then prfx=`basename $inpFil | sed 's/\..*\.txt//'` |
28 |
|
|
else prfx=$2 ; fi |
29 |
|
|
sufx=$3 |
30 |
jmc |
1.1 |
tmpFil='TTT.'$$ |
31 |
jmc |
1.2 |
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 |
jmc |
1.1 |
else |
37 |
jmc |
1.2 |
shift; shift; shift; listV=$* |
38 |
|
|
fi |
39 |
jmc |
1.4 |
if test $mut = 0 ; then |
40 |
jmc |
1.2 |
grep '^# Fields ' $inpFil |
41 |
|
|
echo 'selected var:' $listV |
42 |
|
|
#echo 'sufx, tmpFil:' $sufx $tmpFil |
43 |
jmc |
1.1 |
fi |
44 |
|
|
|
45 |
jmc |
1.2 |
flag=1; |
46 |
jmc |
1.1 |
for vv in $listV |
47 |
|
|
do |
48 |
|
|
case $vv in |
49 |
jmc |
1.2 |
'Eta') var='ETAN' ; vfl=$vv ;; |
50 |
jmc |
1.3 |
'ETAN' ) var=$vv ; vfl='Eta';; |
51 |
jmc |
1.2 |
'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 |
jmc |
1.3 |
'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 |
jmc |
1.2 |
'U2') var='UVELSQ' ; vfl=$vv ;; |
70 |
|
|
'UVELSQ' ) var=$vv ; vfl='U2' ;; |
71 |
|
|
'V2') var='VVELSQ' ; vfl=$vv ;; |
72 |
|
|
'VVELSQ' ) var=$vv ; vfl='V2' ;; |
73 |
jmc |
1.3 |
'W2') var='WVELSQ' ; vfl=$vv ;; |
74 |
|
|
'WVELSQ' ) var=$vv ; vfl='W2' ;; |
75 |
jmc |
1.2 |
*) var=$vv ; vfl=$vv ;; |
76 |
jmc |
1.1 |
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 |
jmc |
1.2 |
#- 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 |
jmc |
1.4 |
head -$nLin $inpFil > $tmpFil |
91 |
jmc |
1.2 |
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 |
jmc |
1.1 |
#- 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 |
jmc |
1.4 |
do |
125 |
jmc |
1.1 |
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 |
jmc |
1.2 |
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 |
jmc |
1.4 |
sed '/^ k /d' $tmpFil | sed '/^ field /d' >> $outFil |
136 |
jmc |
1.1 |
rm -f $sedFil $tmpFil |
137 |
|
|
fi |
138 |
|
|
done |
139 |
|
|
exit |