[Shell] Script

Résolu/Fermé
davidubois Messages postés 7 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 18 juin 2007 - 22 mars 2007 à 15:36
davidubois Messages postés 7 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 18 juin 2007 - 23 mars 2007 à 15:24
Bonjour,

Cela fait une dizaine que je n'ai pas mis les mains dans le camboui...

J'ai un script à corriger car il ne fonctionne pas :-s

Ce script doit recherche un n° de tél dans un fichier csv (;) à partir d'une liste de n° contenu dans un fichier input.

Le script est le suivant :
#!/bin/bash
#set -x

clear
echo "--------------------------------"
echo "Verification des retours DRACCO "
echo "--------------------------------"

dddd="ZZ"

echo "" > output

cat input | while read nd
do
 	dddd=`grep $nd /data/hvme/infiles/dracco/archive/*.dat | cut -c69-70 | grep "00"`
	echo " retour : $nd " $dddd
	if [ "$dddd" == "00" ]
	then
		echo $nd $dddd 	
		echo "update mmc_lignes set l_conf_dracco='00' where l_ligne='"$nd"' and l_acti='1';" >> output	
		dddd=""
	else
		dddd=""
	fi	
done
A votre avis où sont les erreurs ?

J'ai essayé
dddd=`grep ${nd} /data/hvme/infiles/dracco/archive/*.dat | cut -c69-70 | grep "00"`
mais l'ajout d'{} n'a rien changé...

A+DDD
A voir également:

4 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
22 mars 2007 à 15:48
Salut,

affiche une ligne de ton fichier .dat

0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
22 mars 2007 à 15:54
Salut,

On pourrait avoir un aperçu d'un des fichiers "*.dat" ainsi qu'un aperçu du fichier "input" et si c'est pas trop demandé, un aperçu de ce que donne la commande :
grep $nd /data/hvme/infiles/dracco/archive/*.dat | cut -c69-70 | grep "00"
en masquant ou changeant les noms, numéros de tél ou références génantes. Merci.

;-))
0
davidubois Messages postés 7 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 18 juin 2007 1
22 mars 2007 à 16:43
un grep 206765197 ... fonctionne normalement.

...comme demandé...
input :
206765197
100029270
110175947
110723370
110894481
110910729
111024562

fichier.dat
1A;31D0;0206765197;O;20010101;000000;00;Demande traitee correctement;20010101;15G714
1A;31D2;0110723370;O;20010101;000000;00;Demande traitee correctement;20010101;15D716
voili voilou

Merci de votre intérêt ;)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
22 mars 2007 à 17:22
un grep 206765197 ... fonctionne normalement.
Oui ça je me doute, mais est-ce que le reste de la commande, à savoir "| cut -c71-72 | grep "00"" donne le résultat escompté ?
Et quel est-il d'ailleurs ce résultat escompté ?

Parce que chez moi avec ton fichier ".dat" ça donne rien, vu que les caractères "69-70" sont ";2" et ne correspondent en rien à "00" !!!

Alors qu'en remplaçant "69-70" par "71-72" ça marche ;-))
0
davidubois Messages postés 7 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 18 juin 2007 1
23 mars 2007 à 13:59
ok d'ac ...
Mais j'ai une question sur le script suivant et son résultat :
cat input | while read nd
do
 	echo "Input:${nd}."
done
donne
.nput:206765197
.nput:100029270
Pourquoi le point terminal passe en début de ligne ?
Est-ce que la variable $nd contient un caractère de "retour à la ligne" ?
A+DDD
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
23 mars 2007 à 14:25
Re-

Pourquoi le point terminal passe en premier caractère ?
Tu dois avoir un problème avec ton shell, parce que déjà en plus du point, ton "I" de "Input" est sucré au passage !!
Par contre chez moi le script fonctionne bien.

Est-ce que la variable $nd contient un caractère de "retour à la ligne" ?
Non, le retour à la ligne résulte du parsage du fichier dans la boucle "while" qui traite une ligne à la fois.
Si tu tiens vraiment à éliminer ce retour à la ligne utilises plutôt la commande externe "echo" et son paramètre "-e" :
echo -e "Input:${nd} \c"
Tu peux aussi écrire ton script de cette façon :
#!/bin/bash

while read nd
do
        echo -e "Input:${nd} \c"
done < input
Au fait quand est-il de ton script précédent, il marche ou pas ? As-tu fais des modifications par rapport aux réponses reçues ?

:-)
0
davidubois Messages postés 7 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 18 juin 2007 1
23 mars 2007 à 14:50
Merci pour l'explication.
Le script précedent ne fonctionne toujours pas : je dois avoir un pb avec mon shell et je n'en suis pas l'administrateur :-S

le script
cat input | while read nd
do
  grep $nd *.dat
done
ne sort rien !
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
23 mars 2007 à 15:14
Chez moi ça marche, bizarre ;-\
Essaie avec ça :
#!/bin/bash

while read nd
do
 #      echo -e "Input:${nd} \c"
 grep "$nd" *.dat
done < input
et lance ton script avec les options de débogages, à savoir "-xv" :
sh -xv ton_script
;-))
0
davidubois Messages postés 7 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 18 juin 2007 1
23 mars 2007 à 15:24
Yop,

J'ai pas trop le temps de chercher donc nous avons choisi de modifier le fichier input en incluant un caractère blanc après chaque numéro de téléphone. Apparemment, j'ai un carriage return en fin de chaine qui gène son utilisation !
J'ai également adapté mon script car les enreg des fichiers dat (csv) ne sont pas de longueur fixe donc un cut -d";" -f7 me ramève le septième champs des lignes des fichiers csv ramenées par le grep.
En conclusion, j'ai repris un script foireux et comme d'hab j'ai fait confiance à son auteur : grave erreur... Moralité ( éternelle et répétitive ) , j'efface tout et je recommence !

Merci de votre patience !!!!!!
0