|
|
|
|
Bonjour à tous,
J'ai créé un shell qui a pour but d'effectuer un traitement autant de fois qu'il y a la chaine bcp dans le fichier passé en paramètre. Une condition est ajoutée afin de savoir si dans la ligne trouvée avec le mot recherché, apparait l'attribut in (on effectue les opérations) ou out (on s'arrête et on "reboucle").
Voilà ce que cela donne :
#!/bin/ksh
#!/bin/sh
#!/bin/bash
batchFile=/Mesbatches/$1
echo $batchFile
echo $1
for bcp in `grep bcp /Mesbatches/$1 | sed -n '$='`
do
echo $bcp
currentBcp=`grep bcp /Mesbatches/$1 | awk '{print $3}'`
# Ce 3eme champ est l'attribut in ou out
echo $currentBcp
if [ "$currentBcp" = "out" ]
then
continue
else
echo "on est dans le if"
inputFile=`grep bcp /Mesbatches/$1 | awk '{print $4}'`
# Ce 4eme champ est un nom de fichier texte
echo "on est dans l'affichage du fichier input"
echo $inputFile
inputCount=`sed -n '$=' $inputFile`
echo "on affiche le nb de lignes du fichier input"
echo $inputCount
outputFile=/Mesbatches/$1.tmp
echo "on affiche le nom du fichier output"
echo $outputFile
outputCount=`grep 'rows copied' $outputFile | nawk '{print $1}'`
echo $outputCount
if [ "$inputCount" != "$outputCount" ]
then
echo "ERROR on batch $1 !!!"
echo $inputCount rows in file $inputFile
echo $outputCount rows processed in database
return 1
fi
$ check.sh b_utor (ce fichier contient 6 fois le terme bcp) /Mesbatches/b_utor b_utor 6 out out out in in in on est dans le if on est dans l'affichage du fichier input /Mesbatches/ut_order_hist.txt /Mesbatches/ut_issue_master_ext.txt /Mesbatches/ut_order.txt /Mesbatches/ut_order_hist.txt /Mesbatches/ut_issue_master_ext.txt /Mesbatches/ut_order.txt on affiche le nb de lignes du fichier input on affiche le nom du fichier output /infotest/prg/files/tmp/uat/b_utor.tmp $J'aimerais que le traitement se fasse pour chaque occurence alors que là, il essaie de le faire 6 fois d'un seul coup...
Configuration: Sun OS 5.8
La solution du dessus marche pour le nombre d'itération des boucles, mais ne doit pas effectuer le traitement voulu.
#!/bin/ksh
#!/bin/sh
#!/bin/bash
batchFile=/Mesbatches/$1
echo $batchFile
echo $1
OIF=$IFS # sauvegarde du séparateur de champs
IFS=$'\n' # initialisation du séparateur de champs (saut de ligne)
for bcp in $(grep bcp /Mesbatches/$1)
do
echo $bcp
grep "out" <<<"$bcp" >/dev/null
if [ "$?" = 0 ]
then
continue
fi
echo "on est dans le if"
inputFile=`grep bcp /Mesbatches/$1 | awk '{print $4}'`
# Ce 4eme champ est un nom de fichier texte
echo "on est dans l'affichage du fichier input"
echo $inputFile
inputCount=`sed -n '$=' $inputFile`
echo "on affiche le nb de lignes du fichier input"
echo $inputCount
outputFile=/Mesbatches/$1.tmp
echo "on affiche le nom du fichier output"
echo $outputFile
outputCount=`grep 'rows copied' $outputFile | nawk '{print $1}'`
echo $outputCount
if [ "$inputCount" != "$outputCount" ]
then
echo "ERROR on batch $1 !!!"
echo $inputCount rows in file $inputFile
echo $outputCount rows processed in database
return 1
fi
done
IFS=$OIFS # restauration du séparateur de champs par défaut;-))
Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |
Exécute ton script en mode débogage (set -xv) ou lance-le avec l'option (sh -xv ton_script), pour voir ce qui est mal interprété.
|
Salut jipicy,
grep bcp /Mesbatches/$1 | grep " in " > bcp.tmpEnsuite (et c'est là que je rame...) je veux effectuer mon traitement pour chacune des lignes de bcp.tmp (que je n'aurais plus à trier puisque déjà fait) tout en récupérant le 4ème champ pour chacune de ces lignes. Aurais-tu une idée ? Merci pour ton aide. Trez
|
Merci jipicy,
$ more check.sh
#!/bin/ksh
#!/bin/sh
#!/bin/bash
grep bcp Mesbatches/$1 | grep " in " > bcp.tmp
while read line
do
echo "$line\n"
inputFile=`echo $line | awk '{print $4}'`
echo $inputFile
inputCount=`wc -l $inputFile | awk '{print $1}'`
echo $inputCount
outputFile=/infotest/prg/files/tmp/uat/$1.tmp
echo $outputFile
outputCount=`grep 'rows copied' $outputFile | nawk '{print $1}'`
echo $outputCount
if [ "$inputCount" != "$outputCount" ];then
echo "ERROR on batch $1 !!!"
echo $inputCount rows in file $inputFile
echo $outputCount rows processed in database
exit 1
fi
done < bcp.tmpA+
Trez |