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 POSIX Discussion :

Répartition des données d'un fichier


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 42
    Par défaut Répartition des données d'un fichier
    Bonjour

    J'ai un petit soucis avec mon code
    Je cherche à repartir les lignes de mon FichierA dans deux fichiers temporaires
    Si une ligne du fichierA est présente dans le fichierB, je la dépose dans le fichier temporaire TempA sinon je la dépose dans le fichier temporaire TempB

    Voici le code
    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
     
    while read ligne1
     
    do
     
      grep "$ligne1" $FichierB  2>/dev/null
     
     
              if [ $? -eq 0 ]
     
                  then
     
                  echo "${ligne1}" >> $TempA  
              else
     
                  echo "${ligne1}" >> $TempB  
              fi
     
    done < $FichierA
    J'ai fait un CAT sur le fichier temporaire TempA je reçois le bon résultat
    Par contre dans le fichier TempB je ne sort rien

    Merci d'avance

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 352
    Par défaut
    Bonjour,

    Il est possible de passer par un grep directement s'il supporte l'option -f (shell-ksh-supprimer-lignes-fichier-base-fichier)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    grep -f FichierA FichierB >TempA
    grep -v -f FichierA FichierB >TempB
    Cordialement

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 42
    Par défaut Répartition des données d'un fichier
    Merci mais mon OS ne possède pas le -f du grep

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 352
    Par défaut
    Si tu peux le trier et que tes lignes sont unique dans chacun de tes fichiers:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sort fichierb fichierb fichiera | uniq -u >tempb
    sort tempb tempb fichiera | uniq -u >tempa
    Sinon, peux tu préciser ton OS et ton shell ?

    Cordialement

  5. #5
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Une autre solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cat <(sort -u f1.txt) <(sort -u f2.txt) | sort | uniq -d > tempA.txt
    cat <(sort -u f1.txt) <(sort -u f2.txt) | sort | uniq -u > tempB.txt
    Démo :

    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
    idriss@ThinkPad-T420 ~ $ cat f1.txt 
    une ligne unique 1
    une ligne commune
    une seconde ligne unique 1
    une ligne unique 1
    une seconde ligne commune
    idriss@ThinkPad-T420 ~ $ cat f2.txt 
    une ligne unique 2
    une ligne commune
    une seconde ligne unique 2
    une ligne unique 2
    une seconde ligne commune
    idriss@ThinkPad-T420 ~ $ cat <(sort -u f1.txt) <(sort -u f2.txt) | sort | uniq -d > tempA.txt
    idriss@ThinkPad-T420 ~ $ cat tempA.txt 
    une ligne commune
    une seconde ligne commune
    idriss@ThinkPad-T420 ~ $ cat <(sort -u f1.txt) <(sort -u f2.txt) | sort | uniq -u > tempB.txt
    idriss@ThinkPad-T420 ~ $ cat tempB.txt 
    une ligne unique 1
    une ligne unique 2
    une seconde ligne unique 1
    une seconde ligne unique 2
    idriss@ThinkPad-T420 ~ $
    Cordialement,
    Idriss

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 352
    Par défaut
    Je ne pense pas que le résultat du fichier TempB.txt soit bon.
    D'après l'énoncer du problème, il veut juste traiter le fichierA par rapport au fichierB.
    Enfin, moi c'est comme ça que je l'ai compris

    Cordialement.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Bonjour,
    si jamais le fichier $FichierA contient des caractères spéciaux, il vaut mieux utiliser la commande fgrep.
    Les commandes grep ont un flag -q qui permet de tester le status (et c'est plus rapide que le > /dev/null).
    J'adapterais donc ton code de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while read ligne1 ; do
      if fgrep -q "${ligne1}" "${FichierB}"
      then echo "${ligne1}" >> "${TempA}"
      else echo "${ligne1}" >> "${TempB}"
      fi
    done < "${FichierA}"

    Citation Envoyé par Moi302 Voir le message
    J'ai fait un CAT sur le fichier temporaire TempA je reçois le bon résultat
    Par contre dans le fichier TempB je ne sort rien
    Si, à la fin, "${TempB}" n'existe pas, c'est que toutes les lignes sont allées dans "${TempA}".

    Comme tu ne montres pas le début du script, on ne voit pas si les fichiers temporaires sont créés, ni comment.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/09/2005, 10h19
  2. [XML] stocker des données dans un fichier XML
    Par R3iTt0R dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/05/2005, 16h51
  3. Réponses: 3
    Dernier message: 13/12/2004, 13h54
  4. Réponses: 3
    Dernier message: 22/02/2004, 20h09
  5. Temps d'accès à des données dans un fichier
    Par TONIAPEL dans le forum Assembleur
    Réponses: 5
    Dernier message: 28/09/2003, 15h21

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