/[MITgcm]/manual/tools/replace_line_nb
ViewVC logotype

Diff of /manual/tools/replace_line_nb

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.1 by jmc, Mon Aug 8 20:46:53 2005 UTC revision 1.2 by jmc, Sun May 8 15:10:45 2011 UTC
# Line 1  Line 1 
1  #!/bin/sh  #! /usr/bin/env bash
2    
3  if test $# != 2  if test $# != 2
4  then  then
5    echo 'Usage:'`basename $0`'  {tex_file.templ} {data_file} :'    echo "Usage:"`basename $0`"  {tex_file.templ} {data_file} :"
6    echo ' replace >>>PUT_LINE_NB:{variable_name}=<<< in file {tex_file.templ}'    echo " replace >>>PUT_LINE_NB:{variable_name}=<<< in file {tex_file.templ}"
7    echo ' with line number in file {data_file} that corresponds to the'    echo " with line number in file {data_file} that corresponds to the"
8    echo ' description of variable {variable_name}'    echo " description of variable {variable_name} in {tex_file.templ}"
9    echo 'LIMITATION: a) no space / blank between PUT_LINE_NB and "="'    echo "LIMITATION: a) no space (blank) between 'PUT_LINE_NB:' and variable name"
10    echo '            b) no space in the variable name'    echo "            b) no space (blank) in the variable name (but OK before '=')"
11    echo '               (e.g.:  "#YYY=" works, but "# YYY=" does not)'    echo "               (e.g.:  '#YYY =' works, but '# YYY=' does not)"
12    exit    exit
13  else  else
14   texFil=$1   texFil=$1
15   inpFil=$2   inpFil=$2
16  fi  fi
17    if test ! -f $texFil ; then echo " ERROR: file='$texFil' not found" ; exit ; fi
18    if test ! -f $inpFil ; then echo " ERROR: file='$inpFil' not found" ; exit ; fi
19    
20  outFil=`echo $texFil.tex | sed 's/.templ//'`  outFil=`echo $texFil.tex | sed 's/.templ//'`
21  tmpFil1=TTT_fil1.$$  tmpFil1=TTT_fil1.$$
22  tmpFil2=TTT_fil2.$$  tmpFil2=TTT_fil2.$$
23  dbug=  dbug=
24    
25  #texFil='inp_tst'  #texFil='inp_tst' ; outFil=tata ; tmpFil1=titi ; tmpFil2=toto
 #outFil=tata  
 #tmpFil1=titi  
 #tmpFil2=toto  
26  #dbug=1  #dbug=1
27    
28  rm -f $outFil $tmpFil1 $tmpFil2  rm -f $outFil $tmpFil1 $tmpFil2
29  cp -f $texFil $outFil  cp -f $texFil $outFil
30    sed 's/ *//g' $inpFil > $tmpFil2
31    
32  # take all the lines in texFil where a line-Nb needs to be added:  # take all the lines in texFil where a line-Nb needs to be added:
33  listR=`egrep 'PUT_LINE_NB:' $texFil`  listR=`grep 'PUT_LINE_NB:' $texFil | sed 's/PUT_LINE_NB:/ PUT_LINE_NB:/g'`
34  if test $dbug ; then echo $listR ; fi  if test $dbug ; then echo $listR ; fi
35    
36  for pp in $listR  for pp in $listR
# Line 42  do Line 42  do
42   then   then
43  #- select the variable name (=xx) to look for (in inpFil & texFil):  #- select the variable name (=xx) to look for (in inpFil & texFil):
44    if test $dbug ; then echo '  xx='$xx ' <- from pp='$pp ; fi    if test $dbug ; then echo '  xx='$xx ' <- from pp='$pp ; fi
45    while test $pp != $xx    xx=`echo $xx | sed 's/=.*$//g'`
   do  
     pp=$xx  
     xx=`echo $pp | sed 's/=./=/g'`  
   done  
   xx=`echo $pp | sed 's/=$//g'`  
46    if test $dbug ; then echo ' Var name: xx='$xx ; fi    if test $dbug ; then echo ' Var name: xx='$xx ; fi
47  #- select the line in texFil that has been copied from inpFil  #- select the line in texFil that has been copied from inpFil
48  #    (and needs to receive a line Nb)  #    (and needs to receive a line Nb)
49    egrep $xx $texFil | grep -v 'PUT_LINE_NB:' > $tmpFil1    grep $xx $texFil | grep -v 'PUT_LINE_NB:' | sed 's/^ *//g' > $tmpFil1
50    if test -s $tmpFil1    if test -s $tmpFil1
51    then    then
52     #echo 'found' $xx 'in file:' $texFil     #echo 'found' $xx 'in file:' $texFil
     out=1;  
 #-  remove space at the beginning of the line:  
     while test $out = 1  
     do  
       mv $tmpFil1 $tmpFil2  
       sed 's/^ //g' $tmpFil2 > $tmpFil1  
       diff $tmpFil1 $tmpFil2 > /dev/null  
       out=$?  
     done  
53      yy=$xx      yy=$xx
54      nbT=`egrep -c "^${yy}" $tmpFil1`      nbT=`grep -c "^${yy}" $tmpFil1`
55      if [ $nbT -gt 1 ]      if [ $nbT -gt 1 ]
56      then      then
57  #- try to search for "xx=":  #- try to search for "xx=":
58  #-  count number of blank between variable name "xx" and "=":        yy="${xx} *="
59        nblk=0        nbT=`grep -c "^${yy}" $tmpFil1`
60        out=`egrep -c "^${yy}=" $tmpFil1`        if test $dbug ; then echo " nbT='$nbT', yy='${yy}'" ; fi
       while test $out = 0  
       do  
         yy="${yy} " ; #echo "yy=${yy}<"  
         nblk=`expr $nblk + 1` ;  
         out=`egrep -c "^${yy}=" $tmpFil1`  
         if [ $nblk -ge 100 ] ; then out=1 ; fi  
       done  
       if test $nblk = 100 ; then yy=$xx ; else yy=${yy}"=" ; fi  
       nbT=`egrep -c "^${yy}" $tmpFil1`  
       if test $dbug ; then echo 'nblk='$nblk ', nbT='$nbT ", yy=>${yy}<" ; fi  
61      fi      fi
62    else    else
63      nbT=0      nbT=0
# Line 89  do Line 65  do
65    nn='XXX';    nn='XXX';
66    if test $nbT = '1' ; then    if test $nbT = '1' ; then
67  #-  now take the only line that start with variable name "xx":  #-  now take the only line that start with variable name "xx":
68      LINE=`egrep "^${yy}" $tmpFil1 | sed 's/\*/\\\*/g'`      LINE=`sed -n "/^${yy}/p" $tmpFil1 | sed 's/\*/\\\*/g'`
     if test $dbug ; then echo '  LINE='$LINE ; fi  
69  #-  find the same line in inpFil and take the line number (nn):  #-  find the same line in inpFil and take the line number (nn):
70      nbI=`egrep -c "$LINE" $inpFil`      inpUsed=$inpFil
71     #echo 'nbI='$nbI      nbI=`grep -c "$LINE" $inpUsed`
72        if test $dbug ; then echo "  LINE='$LINE' ; nbI='$nbI'" ; fi
73        if test $nbI = '0' ; then
74    #-  try without blank:
75          LINE=`sed -n "/^${yy}/p" $tmpFil1 | sed 's/\*/\\\*/g' | sed 's/ *//g'`
76          inpUsed=$tmpFil2
77          nbI=`grep -c "$LINE" $inpUsed`
78          if test $dbug ; then echo "  LINE='$LINE' ; nbI='$nbI'" ; fi
79        fi
80      if test $nbI = 1      if test $nbI = 1
81      then      then
82        nn=`sed -n "/$LINE/=" $inpFil`        nn=`sed -n "/$LINE/=" $inpUsed`
83      else      else
84        if test $nbI = '0';        if test $nbI = '0';
85        then echo 'no line found with "'$xx'" in file:' $inpFil        then echo "no line '$LINE' found in file:" $inpFil
86        else echo 'too many('$nbI') lines with "'$xx'" in file:' $inpFil        else echo 'too many('$nbI') lines with "'$xx'" in file:' $inpFil
87        fi        fi
88      fi      fi
# Line 110  do Line 93  do
93      fi      fi
94    fi    fi
95  #- replace by the line number (if found), XXX otherwise:  #- replace by the line number (if found), XXX otherwise:
96    sed "s/PUT_LINE_NB:${xx}=/$nn/" $outFil > $tmpFil1    sed "s/PUT_LINE_NB:${xx} *=/$nn/" $outFil > $tmpFil1
97    if test $dbug ; then echo " Replace PUT_LINE_NB:${xx}= by line number: nn=$nn" ; fi    if test $dbug ; then echo " Replace PUT_LINE_NB:${xx}= by line number: nn=$nn" ; fi
  #if test $dbug ; then echo diff $outFil $tmpFil1 ; diff $outFil $tmpFil1 ; fi  
98    mv $tmpFil1 $outFil    mv $tmpFil1 $outFil
99   fi   fi
100  done  done

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

  ViewVC Help
Powered by ViewVC 1.1.22