Bonjour,

je doit analyser des fichiers .txt avec un script shell. Si dans le fichier, il y a une variable, ici P330, la suite du script s'exécute, sinon, rien ne se passe.

Donc j'ai fait le script suivant mais je n'arrive pas à faire fonctionner la fonction if qui teste la présence de cette variable.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#$ nl adress_coordonnee1.awk
{

for fich in *.txt; do

grep -q "P330" $fich
if [ "$?" = "0" ]
then

sed "s/address /'/g" adress2_${fich%.*}.txt > adress1_${fich%.*}.txt
sed "s/rue/'/g" adress1_${fich%.*}1.txt > adress2_${fich%.*}.txt

#permet de vider la table avant de la remplir
echo 'echo "truncate table "adresse_'${fich%.*}'" ;" | mysql fournisseur ' > ADRESSE_FINAL_${fich%.*}.sql


#affiche "insert into ..." dans un fichier nommé adress_text.csv
echo 'echo "insert into adresse_'${fich%.*}' (adresse, rue) values '> adress_text.csv

#permet d'inserer les données de adress1_coordonnee1.txt dans adress_text.csv tout en gardant en mémoire les valeurs déja inscrites dans ce fichier.
cat adress1_${fich%.*}.txt >> adress_text.csv

#permet de supprimer les retours chariots du fichier adress_text.txt puis de tout mettre dans un fichier adress1_text.csv
tr -d '\r\n' < adress_text.csv > adress1_text.csv


sed 's/)(/), (/g' adress1_text.csv > adress2_text.csv
sed 's/)*$/);" | mysql founisseur/g' adress2_text.csv > adress3_text.csv


echo -e '\n' >> adress3_text.csv
cat adress3_text.csv >> ADRESSE_FINAL_${fich%.*}.sql


#permet de supprimer définitivement les fichiers intermédiaires générés après l'éxécution du script sans les mettre dans la poubelle. Il ne restera que ADRESSE_FINAL.sql
rm adress3_${fich%.*}.txt
rm adress2_${fich%.*}.txt
rm adress1_${fich%.*}.txt
rm adress_text.csv
rm adress1_text.csv
rm adress2_text.csv
rm adress3_text.csv

else

fi

done
}
merci