Comment optimiser ce script shell: test2.sh

Fermé
yaLINUXNUL Messages postés 45 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 25 avril 2008 - 28 mars 2008 à 18:43
yaLINUXNUL Messages postés 45 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 25 avril 2008 - 28 mars 2008 à 21:01
Bonjour,
comment optimiser ce script shell: test2.sh test
----------------------------------

1) Je ne sais pas optimiser mais celà fonctionne
2) J'ai un soucis lors de la lecture du fichier test.tmp qui boucle a l'infini si j'utilise

while read line
do
...
done < $1.tmp

------
Le principe:

Un fichier d'index possède une première ligne dont je n'ai pas l'intérêt.Elle est donc supprimée et le fichier de travail devient test.tmp

Chaque ligne du fichier correspont à un ou plusieurs traitements à effectuer
le nombre de traitement pour une ligne correspond au nombre de fichiers *.pdf trouvé dans la colonne 6
les autres colonnes sont des variables qui sont passées à la fonction alpha qui prendra les paramètres et dera appel à une commande spécifique.
Le traitement est effectué uniquement si la colonne 2 (par exemple) change de valeur.
Lorsque le traitement est terminé un fichier idx est reconstruit

------
fichier test (les colonnes sont séparées par des tabulation

- test
_@#_tsm_vpf_idx
3_1 00000008 00000001 0001_000 00000001 aa.pdf
4_1 00000008 00000001 0001_000 00000002 aa.pdf
5_1 00000008 00000001 0001_000 00000003 aa.pdf
6_1 00000008 00000001 0001_000 00000004 aa.pdf
1_1 00000006 00000001 0001_000 00000001 bb.pdf
0_1 00000005 00000001 0001_000 00000001 cc.pdf
0_1 00000001 00000001 0001_000 00000001 dd.pdf,ee.pdf,ff.pdf
1_1 00000001 00000001 0001_000 00000002 dd.pdf,ee.pdf
2_1 00000001 00000001 0001_000 00000003 dd.pdf,ee.pdf
3_1 00000001 00000001 0001_000 00000004 dd.pdf,ee.pdf

-test.tmp
3_1 00000008 00000001 0001_000 00000001 aa.pdf
4_1 00000008 00000001 0001_000 00000002 aa.pdf
5_1 00000008 00000001 0001_000 00000003 aa.pdf
6_1 00000008 00000001 0001_000 00000004 aa.pdf
1_1 00000006 00000001 0001_000 00000001 bb.pdf
0_1 00000005 00000001 0001_000 00000001 cc.pdf
0_1 00000001 00000001 0001_000 00000001 dd.pdf,ee.pdf,ff.pdf
1_1 00000001 00000001 0001_000 00000002 dd.pdf,ee.pdf
2_1 00000001 00000001 0001_000 00000003 dd.pdf,ee.pdf
3_1 00000001 00000001 0001_000 00000004 dd.pdf,ee.pdf

-test.idx
nouvelle entete
3_1 00000008 00000001 0001_000 00000001 aa.pdf
4_1 00000008 00000001 0001_000 00000002 aa.pdf
5_1 00000008 00000001 0001_000 00000003 aa.pdf
6_1 00000008 00000001 0001_000 00000004 aa.pdf
1_1 00000006 00000001 0001_000 00000001 bb.pdf
0_1 00000005 00000001 0001_000 00000001 cc.pdf
0_1 00000001 00000001 0001_000 00000001 dd.pdf,ee.pdf,ff.pdf
1_1 00000001 00000001 0001_000 00000002 dd.pdf,ee.pdf
2_1 00000001 00000001 0001_000 00000003 dd.pdf,ee.pdf
3_1 00000001 00000001 0001_000 00000004 dd.pdf,ee.pdf


-en final la fonction alpha récupé à chaque rupture de $var2 et pour chaque pdf défini dans $var10

alpha var2:00000008-var7: aa.pdf-var8:aa.pdf-var9:aa.pdf-var10:aa.pdf
alpha var2:00000006-var7: bb.pdf-var8:bb.pdf-var9:bb.pdf-var10:bb.pdf
alpha var2:00000005-var7: cc.pdf-var8:cc.pdf-var9:cc.pdf-var10:cc.pdf
alpha var2:00000001-var7: dd.pdf-var8:ee.pdf-var9:ff.pdf-var10:dd.pdf
alpha var2:00000001-var7: dd.pdf-var8:ee.pdf-var9:ff.pdf-var10:ee.pdf
alpha var2:00000001-var7: dd.pdf-var8:ee.pdf-var9:ff.pdf-var10:ff.pdf

------
script test2.sh test
------


function alpha()
{
echo " ------ Dans alpha :"
echo " ------ $var2"
echo "alphaverif var2:$var2-var7: $var7-var8:$var8-var9:$var9-var10:$var10"
returncodef1=0
}

function beta()
{
echo " ------ Dans beta :"
echo " ------ $var5"
returncodef2=0
}


# $1 le fichier d'index sans extension est passé en parametre au script

# Suppression de la ligne d'entete dans le fichier d'index
# Ecriture dans le fichier $1.tmp

#n: nombre de lignes du fichier index
n=`wc -l $1`
nb=`echo $n | cut -d" " -f1 | bc`
n=`echo $nb - 1|bc`

tail -$n $1 > $1.tmp

# le fichier sans l'entete existe $1.tmp

# Lecture ligne à ligne du fichier $1.tmp
cat $1.tmp
y=0
change=oui
while [ $y -ne $n ]
do
y=$(( $y + 1 ))

read line
echo $line
var2=`echo $line | cut -d" " -f2`

echo var2:$var2 change:$change

if [ "$var2" != "$change" ]

then
{
change=$var2
var1=`echo $line | cut -d" " -f1`
var3=`echo $line | cut -d" " -f3`
var4=`echo $line | cut -d" " -f4`
var5=`echo $line | cut -d" " -f5`
var6=`echo $line | cut -d" " -f6`

echo $var1
echo $var2
echo $var3
echo $var4
echo $var5
echo $var6
# Analyse des pdf
#

var7=`echo $var6 | cut -d"," -f1`
var8=`echo $var6 | cut -d"," -f2`
var9=`echo $var6 | cut -d"," -f3`
echo $var7
echo $var8
echo $var9

if [ "$var7" != "" ]

then
{
var10=$var7
# appel de la fonction alpha
alpha
# appel de la fonction beta
beta

if [ "$var8" != "$var7" ]
then
{
var10=$var8
# appel de la fonction alpha
alpha
# appel de la fonction beta
beta

if [ "$var9" != "$var8" ]
then
{
var10=$var9
# appel de la fonction alpha
alpha
# appel de la fonction beta
beta
}
fi
}
fi
}
fi

}
fi



done < $1.tmp

# Reconstruction du fichier
echo "nouvelle entete" >> $1.idx
cat $1.tmp >> $1.idx

-------


Merci de bien vouloir me donner un coup de main
A voir également:

1 réponse

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
28 mars 2008 à 20:08
Salut,

J'avoue que je n'ai absolument rien compris à ce que tu veux faire !? ;-\

Au final ton fichier de sortie est le même que le fichier d'entrée à part l'entête :-\
A moins que tu veuilles qu'il ressemble à :
alpha var2:00000008-var7: aa.pdf-var8:aa.pdf-var9:aa.pdf-var10:aa.pdf
alpha var2:00000006-var7: bb.pdf-var8:bb.pdf-var9:bb.pdf-var10:bb.pdf
alpha var2:00000005-var7: cc.pdf-var8:cc.pdf-var9:cc.pdf-var10:cc.pdf
alpha var2:00000001-var7: dd.pdf-var8:ee.pdf-var9:ff.pdf-var10:dd.pdf
alpha var2:00000001-var7: dd.pdf-var8:ee.pdf-var9:ff.pdf-var10:ee.pdf
alpha var2:00000001-var7: dd.pdf-var8:ee.pdf-var9:ff.pdf-var10:ff.pdf


Ou alors j'ai vraiment rien pigé ?
0
yaLINUXNUL Messages postés 45 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 25 avril 2008
28 mars 2008 à 21:01
Le fichier de sortie du script n'est pas important.

L'mportant est d'obtenir l'ensembles des paramètres à mettre à la disposition de la fonction 'function alpha() qui lancera une application qui prendra les paramètres mis à disposition en entrée de la fonction.

Autant d'application que de passage dans la fonction alpha.

C'est tout le bazard d'avant le fichier de sortie du script qui lui ne voit effectivement que l'entete changer

Cordialement
0