Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Applications > Shell

Shell Vos questions sur l'utilisation des commandes shell

Réponse
 
Outils de la discussion
Vieux 04/08/2008, 17h13   #1 (permalink)
Membre expérimenté
 
Avatar de pinocchio
 
Date d'inscription: novembre 2002
Localisation: orne
Âge: 32
Messages: 570
Par défaut while read fichier en paramètre

Bonjour,
J'utilise un shell qui traite 3 fichiers en paramètre. il y'a également un autre paramètre mais non utile dans cette partie
Mon souci est qu'il n'arrive pas à lire les données du dernier fichier.
Code :
ENT=$DONNEES/$4
while read ENTI
do
   echo "1Ent ---> " &ENTI
done < ${ENT_SUP}
Lors de chaque ligne du fichier, j'ai comme echo qu'ENTI : not found

Dans le fichier, il y'a uniquement des affichages de numéro, comme ci-dessous.
Citation:
54124
32568
1205
FG7541557
HJK7474
Avez-vous une idée, svp?
Cordialement
Pinocchio
__________________
La SNCF est mon ami
blog PARIS-GRANVILLE
pinocchio est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/08/2008, 17h43   #2 (permalink)
Nouveau membre du Club
 
Date d'inscription: avril 2004
Âge: 29
Messages: 53
Par défaut

ca serait pas plutôt
Code :
ENT=$DONNEES/$4
while read ENTI
do
   echo "1Ent ---> " $ENTI
done < ${ENT_SUP}
???
__________________
First, they ignore you. Then, they laught at you.Then, they fight you. Then, you win.

Mohandas Gandhi
dokho est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/08/2008, 10h05   #3 (permalink)
Membre expérimenté
 
Avatar de pinocchio
 
Date d'inscription: novembre 2002
Localisation: orne
Âge: 32
Messages: 570
Par défaut

ok merci pour cette première étape par la suite dans la boucle,il est effectué
Code :
grep $ENTI $Temp1 >> $Exp_Sup

sed  /$ENTI/d $Temp1 >$Temp2

cp -f $Temp2 $Temp1
Temp1 correspond à une copie de mon fichier d'origine. Je récupère ligne par ligne la valeur dont je dois supprimer les lignes du fichier Temp1.
Je ne connais rien aux commandes unix mais n'existe-t-il pas une commande que je pourrais utiliser pour éviter d'effectuer cette boucle pour récupérer ligne par ligne mes $ENTI .
Car actuellement le traitement effectue 17 fois la copie du fichier et son parcours pour supprimer la valeur. Le fichier dans lequel je dois effectuer la suppression fait 400Mo et 17 fois le parcours, c'est pas très rapide.
Si vous avez le nom d'une commande, je serai preneur.
Cordialement
Pinocchio
__________________
La SNCF est mon ami
blog PARIS-GRANVILLE
pinocchio est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/08/2008, 10h41   #4 (permalink)
Membre éprouvé
 
Avatar de KindPlayer
 
Date d'inscription: février 2007
Messages: 451
Par défaut

deja pour éviter la copie tu peux utiliser l'option -i de sed pour appliquer les changements directement dans ("in") le fichier.
__________________
La science est ce que nous comprenons suffisamment bien pour l'expliquer à un ordinateur. L'art, c'est tout ce que nous faisons d'autre.
Donald E. Knuth
KindPlayer est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/08/2008, 10h58   #5 (permalink)
Membre expérimenté
 
Avatar de pinocchio
 
Date d'inscription: novembre 2002
Localisation: orne
Âge: 32
Messages: 570
Par défaut

Ben je ne peux pas vraiment car dans le fichier je garde tout sauf ce que j'ai récupéré via le sed.
Cdt
Pinocchio
__________________
La SNCF est mon ami
blog PARIS-GRANVILLE
pinocchio est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/08/2008, 21h21   #6 (permalink)
Membre éprouvé
 
Avatar de BlaireauOne
 
Date d'inscription: mars 2007
Localisation: Toulouse
Messages: 471
Par défaut

Si j'ai bien compris, tu as 17 lignes à supprimer et les "cles" de recherche sont comme celles ci-dessous :

Code :
54124
32568
1205
FG7541557
HJK7474
Moi, dans ce cas là, je ferais la commande suivante :

Code :
sed -r "54124|32568|1205|FG7541557|HJK7474" infile > outfile
Argument -r indispensable (cf man sed) :

-r, --regexp-extended
use extended regular expressions in the script.

le pipe '|' signifie OU
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Applications > Shell



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide