IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

while read fichier en paramètre


Sujet :

Shell et commandes GNU

  1. #1
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    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.
    54124
    32568
    1205
    FG7541557
    HJK7474
    Avez-vous une idée, svp?
    Cordialement
    Pinocchio

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 91
    Par défaut
    ca serait pas plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ENT=$DONNEES/$4
    while read ENTI
    do
       echo "1Ent ---> " $ENTI
    done < ${ENT_SUP}
    ???

  3. #3
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut
    ok merci pour cette première étape par la suite dans la boucle,il est effectué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    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

  4. #4
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    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.

  5. #5
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    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

  6. #6
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    Si j'ai bien compris, tu as 17 lignes à supprimer et les "cles" de recherche sont comme celles ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    54124
    32568
    1205
    FG7541557
    HJK7474
    Moi, dans ce cas là, je ferais la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. Traitement fichier par while read
    Par ybebert dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 26/05/2014, 12h09
  2. while read d'un fichier
    Par falcon dans le forum Unix
    Réponses: 4
    Dernier message: 18/02/2010, 14h41
  3. while read, fermer un fichier ?
    Par ynk68 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 25/09/2007, 14h26
  4. Réponses: 7
    Dernier message: 29/09/2005, 10h19
  5. Boucle while & read
    Par gibet_b dans le forum Linux
    Réponses: 4
    Dernier message: 29/04/2005, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo