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 :

Suppression des doublons sur un fichier en fonction de plusieurs champs


Sujet :

Shell et commandes POSIX

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut Suppression des doublons sur un fichier en fonction de plusieurs champs
    Bonjour,

    J'ai un fichier csv avec plusieurs champs séparés par des ";".
    Je souhaite supprimer les doublons sur ce fichier. On reconnait des doublons lorsque pour des lignes différentes les champs 1,2,3,4,5 et 9 sont identiques.

    Comment faire pour afficher les lignes sans doublons ou supprimer les doublons en prenant en comptes plusieurs champs distincts.

    Merci de votre aide !
    Moctarim

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    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 102
    Points : 5 851
    Points
    5 851
    Par défaut
    Cela ne répond pas à la question, mais si le fichier a été généré par une requête SQL, ce serait peut-être plus simple de la corriger...

    Sinon on peut aussi recharger le fichier dans une BD et refaire l'extraction

    A part ça, a-t-on le droit de changer l'ordre des lignes du fichier?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    On ne peut pas jouer sur une requête SQL. Par contre on peut changer l'ordre des lignes du fichiers.

    Merci

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Avec awk, tu peux isoler les champs qui t'interessent.
    Avec grep ou sort, tu dois pouvoir trouver ceux qui sont en double
    Et ensuite, avec grep -v, tu peux les eliminer -- reste a garder le premier.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    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 102
    Points : 5 851
    Points
    5 851
    Par défaut
    Citation Envoyé par moctarim Voir le message
    On ne peut pas jouer sur une requête SQL. Par contre on peut changer l'ordre des lignes du fichiers.

    Merci
    Si on peut changer l'ordre des lignes du fichier, je commencerais par un 'sort' sur les champs 1,2,3,4,5 et 9, puis je piperais avec un petit programme awk qui, pour chaque ligne, constitue une chaîne en concaténant les champs 1,2,3,4,5 et 9, compare cette chaîne avec la dernière valeur enregistrée: si identique, alors ne rien faire sinon afficher la ligne complète et enregistrer la nouvelle valeur.
    Quelque chose comme (à vérifier):
    Edit (après vérification):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sort -t';' -k1,5 -k9,9 | awk -F';' 'BEGIN {id=""; }
    { nid = $1 ";" $2 ";" $3 ";" $4 ";" $5 ";" $9 ;
      if ( id != nid ) { print $0; id = nid; }}'

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    Merci je teste le programme et je vous fais un retour.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    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 102
    Points : 5 851
    Points
    5 851
    Par défaut
    Après une petite vérification, vaudrait mieux essayer ceci...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sort -t';' -k1,5 -k9,9 | awk -F';' 'BEGIN {id=""; }
    { nid = $1 ";" $2 ";" $3 ";" $4 ";" $5 ";" $9 ;
      if ( id != nid ) { print $0; id = nid; }}'
    pendant qu'on y est, autant respecter la syntaxe de sort et awk!

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    Super merci beaucoup !

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

Discussions similaires

  1. [XL-2003] Contrôle des doublons sur plusieurs feuilles, puis suppression
    Par DeathLighT dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/03/2013, 12h14
  2. Réponses: 4
    Dernier message: 20/04/2011, 14h07
  3. Réponses: 1
    Dernier message: 22/03/2009, 18h03
  4. Réponses: 15
    Dernier message: 24/04/2007, 19h36
  5. Réponses: 10
    Dernier message: 18/05/2006, 16h18

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