1 |
#! /usr/bin/env bash |
2 |
|
3 |
if test $# != 2 |
4 |
then |
5 |
echo "Usage:"`basename $0`" {tex_file.templ} {data_file} :" |
6 |
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" |
8 |
echo " description of variable {variable_name} in {tex_file.templ}" |
9 |
echo "LIMITATION: a) no space (blank) between 'PUT_LINE_NB:' and variable name" |
10 |
echo " b) no space (blank) in the variable name (but OK before '=')" |
11 |
echo " (e.g.: '#YYY =' works, but '# YYY=' does not)" |
12 |
exit |
13 |
else |
14 |
texFil=$1 |
15 |
inpFil=$2 |
16 |
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//'` |
21 |
tmpFil1=TTT_fil1.$$ |
22 |
tmpFil2=TTT_fil2.$$ |
23 |
dbug= |
24 |
|
25 |
#texFil='inp_tst' ; outFil=tata ; tmpFil1=titi ; tmpFil2=toto |
26 |
#dbug=1 |
27 |
|
28 |
rm -f $outFil $tmpFil1 $tmpFil2 |
29 |
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: |
33 |
listR=`grep 'PUT_LINE_NB:' $texFil | sed 's/PUT_LINE_NB:/ PUT_LINE_NB:/g'` |
34 |
if test $dbug ; then echo $listR ; fi |
35 |
|
36 |
for pp in $listR |
37 |
do |
38 |
#echo 'pp='$pp |
39 |
xx=`echo $pp | sed "s/PUT_LINE_NB://g"` |
40 |
#echo 'xx='$pp |
41 |
if test $pp != $xx |
42 |
then |
43 |
#- select the variable name (=xx) to look for (in inpFil & texFil): |
44 |
if test $dbug ; then echo ' xx='$xx ' <- from pp='$pp ; fi |
45 |
xx=`echo $xx | sed 's/=.*$//g'` |
46 |
if test $dbug ; then echo ' Var name: xx='$xx ; fi |
47 |
#- select the line in texFil that has been copied from inpFil |
48 |
# (and needs to receive a line Nb) |
49 |
grep $xx $texFil | grep -v 'PUT_LINE_NB:' | sed 's/^ *//g' > $tmpFil1 |
50 |
if test -s $tmpFil1 |
51 |
then |
52 |
#echo 'found' $xx 'in file:' $texFil |
53 |
yy=$xx |
54 |
nbT=`grep -c "^${yy}" $tmpFil1` |
55 |
if [ $nbT -gt 1 ] |
56 |
then |
57 |
#- try to search for "xx=": |
58 |
yy="${xx} *=" |
59 |
nbT=`grep -c "^${yy}" $tmpFil1` |
60 |
if test $dbug ; then echo " nbT='$nbT', yy='${yy}'" ; fi |
61 |
fi |
62 |
else |
63 |
nbT=0 |
64 |
fi |
65 |
nn='XXX'; |
66 |
if test $nbT = '1' ; then |
67 |
#- now take the only line that start with variable name "xx": |
68 |
LINE=`sed -n "/^${yy}/p" $tmpFil1 | sed 's/\*/\\\*/g'` |
69 |
#- find the same line in inpFil and take the line number (nn): |
70 |
inpUsed=$inpFil |
71 |
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 |
81 |
then |
82 |
nn=`sed -n "/$LINE/=" $inpUsed` |
83 |
else |
84 |
if test $nbI = '0'; |
85 |
then echo "no line '$LINE' found in file:" $inpFil |
86 |
else echo 'too many('$nbI') lines with "'$xx'" in file:' $inpFil |
87 |
fi |
88 |
fi |
89 |
else |
90 |
if test $nbT = '0'; |
91 |
then echo 'did not find "'$xx'" in file:' $texFil |
92 |
else echo 'too many('$nbT') "'$xx'" in file:' $texFil |
93 |
fi |
94 |
fi |
95 |
#- replace by the line number (if found), XXX otherwise: |
96 |
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 |
98 |
mv $tmpFil1 $outFil |
99 |
fi |
100 |
done |
101 |
rm -f $tmpFil1 $tmpFil2 |
102 |
if test $dbug ; then echo diff $outFil $texFil ; diff $outFil $texFil ; fi |
103 |
|
104 |
exit |