1 |
#!/bin/sh |
2 |
|
3 |
# $Header: $ |
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 |
'Et2') var='ETANSQ' ; vfl=$vv ;; |
52 |
'ETANSQ' ) var=$vv ; vfl='Et2' ;; |
53 |
'T') var='THETA' ; vfl=$vv ;; |
54 |
'THETA' ) var=$vv ; vfl='T' ;; |
55 |
'S') var='SALT' ; vfl=$vv ;; |
56 |
'SALT' ) var=$vv ; vfl='S' ;; |
57 |
'U') var='UVEL' ; vfl=$vv ;; |
58 |
'UVEL' ) var=$vv ; vfl='U' ;; |
59 |
'V') var='VVEL' ; vfl=$vv ;; |
60 |
'VVEL' ) var=$vv ; vfl='V' ;; |
61 |
'W') var='WVEL' ; vfl=$vv ;; |
62 |
'WVEL' ) var=$vv ; vfl='W' ;; |
63 |
'Phi') var='PHIHYD' ; vfl=$vv ;; |
64 |
'PHIHYD' ) var=$vv ; vfl='Phi' ;; |
65 |
'U2') var='UVELSQ' ; vfl=$vv ;; |
66 |
'UVELSQ' ) var=$vv ; vfl='U2' ;; |
67 |
'V2') var='VVELSQ' ; vfl=$vv ;; |
68 |
'VVELSQ' ) var=$vv ; vfl='V2' ;; |
69 |
*) var=$vv ; vfl=$vv ;; |
70 |
esac |
71 |
#echo 'grep -m 1' "^ field : ${var} " $inpFil |
72 |
#grep -m 1 "^ field : ${var} " $inpFil |
73 |
nLev=`grep -m 1 "^ field : ${var} " $inpFil | sed 's/.*=//'` |
74 |
if test ${nLev}'xx' = 'xx' |
75 |
then |
76 |
echo 'WARNING variable:' $var 'not found in file' $inpFil |
77 |
else |
78 |
#echo 'nLev=' $nLev |
79 |
#- first variable: extract Header, then Iter Numbers: |
80 |
if test $flag = 1 |
81 |
then flag=0 |
82 |
outFil=${prfx}'_head'.$sufx |
83 |
nLin=`sed -n "/^# end of header/=" $inpFil` |
84 |
head -$nLin $inpFil > $tmpFil |
85 |
if test -f $outFil -a $add = 0 ; then rm -f $outFil ; fi |
86 |
if test -f $outFil |
87 |
then |
88 |
diff $tmpFil $outFil > /dev/null |
89 |
out=$? |
90 |
if test $out != '0' |
91 |
then |
92 |
echo 'WARNNING : get Different header file:' $outFil |
93 |
cat $tmpFil >> $outFil |
94 |
fi |
95 |
rm -f $tmpFil |
96 |
else mv $tmpFil $outFil |
97 |
if test $mut = 0 ; then echo 'extract Header (' $nLin 'lines ) ==> ' $outFil ; fi |
98 |
fi |
99 |
#---- |
100 |
outFil=${prfx}'_Iter'.$sufx |
101 |
if test $mut = 0 ; then echo 'extract Iteration Nb ==> outFil=' $outFil ; fi |
102 |
if test -f $outFil -a $add = 0 ; then rm -f $outFil ; fi |
103 |
touch $outFil |
104 |
rList=`sed -n '/^# Regions /s/# Regions ://p' $inpFil` |
105 |
for j in $rList ; do jj=$j ; done |
106 |
grep "^ field : ${var} " $inpFil | grep "$j ; nb.Lev =" | \ |
107 |
sed 's/.*Iter =//' | sed 's/; region.*//g' >> $outFil |
108 |
fi |
109 |
#---- |
110 |
outFil=${prfx}'_'$vfl.$sufx |
111 |
if test $mut = 0 ; then echo 'extract variable:' $var ', outFil=' $outFil ; fi |
112 |
#- echo set of sed instruction to file sedFil : |
113 |
sedFil=$tmpFil.$vv |
114 |
rm -f $sedFil |
115 |
echo "/^ field : $var /{" > $sedFil |
116 |
if test $nLev = 1 ; then k=0 ; else k=-1 ; fi |
117 |
while [ $k -le $nLev ] |
118 |
do |
119 |
echo "N" >> $sedFil |
120 |
k=`expr $k + 1` |
121 |
done |
122 |
echo "p" >> $sedFil |
123 |
echo "}" >> $sedFil |
124 |
#- extract records of variable "var" using sed command & sedFil |
125 |
sed -n -f $sedFil $inpFil > $tmpFil |
126 |
if test $mut = 0 ; then head -1 $tmpFil ; fi |
127 |
if test -f $outFil -a $add = 0 ; then rm -f $outFil ; fi |
128 |
touch $outFil |
129 |
sed '/^ k /d' $tmpFil | sed '/^ field /d' >> $outFil |
130 |
rm -f $sedFil $tmpFil |
131 |
fi |
132 |
done |
133 |
exit |