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

Scripts/Batch Discussion :

merger 2 fichiers csv en fusionnant les doublons [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Septembre 2017
    Messages : 3
    Points : 2
    Points
    2
    Par défaut merger 2 fichiers csv en fusionnant les doublons
    Bonjour,

    J'ai 2 fichiers csv avec les mêmes colonnes que je souhaite fusionner.
    Je les concatène de cette manière :
    Ensuite, j'ai ce script pour supprimer les doublons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    OriginalFile = "C:\chemin-fichier\merged.csv"
    $ExportFile = "C:\chemin-fichier\merged-no-doublons.csv"
    Import-Csv $OriginalFile -Delimiter ';'| Sort-Object Nom-Colonne –Unique| Export-Csv -Path $ExportFile -NoTypeInformation -Delimiter ';' -Force
    En fait pour les doublons, je vais avoir deux lignes avec une même référence (en l'occurence un mail) mais les colonnes remplies ne sont pas les mêmes sur les deux lignes. Or le script pour les doublons ci-dessus garde la 1ère ligne mais supprime la 2nde et je perds des données.
    Je cherche donc un moyen de fusionner ces 2 lignes sans perte.

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    le switch -Unique supprime effectivement les doublons, si tu veux retravailler les données en double essaie de les regrouper (Group-Object) par le nom de ta propriété.
    Le tableau renvoyé par Group-Object contient les éléments unique de la collection d'origine et la propriété Group de chacun de ses éléments contient les 'lignes' en double.

  3. #3
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Septembre 2017
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour Laurent,

    Merci pour ton aide

    J'ai ajusté mon script comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Import-Csv $OriginalFile -Delimiter ';'| Sort-Object Email | Group-Object Email | Export-Csv -Path $ExportFile -NoTypeInformation -Delimiter ';' -Force
    Je récupère en sortie un tableau avec nombre d’occurrence pour chaque email mais je ne sais pas comment récupérer mon tableau d'origine avec ses colonnes.

    • J'ai une colonne "Values" avec "System.Collections.ArrayList" pour chaque ligne
    • J'ai une colonne "Count" avec le nombre d'occurence pour chaque ligne
    • J'ai une colonne "Group" avec "System.Collections.ObjectModel.Collection`1[System.Management.Automation.PSObject]" pour chaque ligne
    • J'ai une colonne "Name" avec l'email

    Si je comprends bien ta réponse, je peux les autres colonnes pour chaque ligne via la propriété Group de cahque ligne ? Je vois pas comment faire ça

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Un conseil, ici pense objet pas colonne.
    Dans ton approche tu ne modifies rien si ce n'est la structure de ta collection.Et Export-csv ne sait pas gérer des collections de collection.

    Une ébauche rapido du principe :
    Code powershell : 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
     
     #génère les données de  test
    get-process|export-csv c:\temp\t.csv
    $Process=Import-csv c:\temp\t.csv
     
     #groupe par nom
    $Groupes=$process|group-object Name
    $Groupes
     
     #exemple d'un élément contenant 1 ou n duplications
    $ToConcat=$Groupes|Where {$_.Name -eq 'svchost'}
    $ToConcat.Group
     
     #Enumération auto de la collection Group
     #Attention PS v3 et >
    $ToConcat.Group.starttime
     
     #ici pas de perte d'infos, on concatène toutes les dates dans une string
    $NewInfo="$($ToConcat.Group.starttime)"
    $NewInfo
     
     #MAJ des données
     #exemple pour cette démo du principe : l'indice 0 ne correspond pas à l'objet $ToConcat trouvé précédemment
    $Groupes[0].group[0].Starttime=$NewInfo # ici starttime est de type String
     
     #Attention PS v3 et >
    $Groupes.group[Export-csv c:\temp\t2.csv
    La MAJ doit se faire dans une boucle pour ne pas avoir à calculer des indices de tableau.

  5. #5
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Septembre 2017
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour Laurent,

    J'ai oublié de te répondre désolé
    ça dépassait un peu mes capacités sur le sujet. J'ai pu trouver quelqu'un pour réaliser l'opération.
    Merci encore pour ton aide!
    Gabriel

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

Discussions similaires

  1. Importer un fichier CSV en choisissant les colonnes
    Par wam111 dans le forum Administration
    Réponses: 5
    Dernier message: 25/04/2018, 15h16
  2. Réponses: 0
    Dernier message: 14/10/2014, 12h24
  3. Travailler sur un fichier Csv et remodeler les champs en colonnes
    Par souhail72 dans le forum Développement de jobs
    Réponses: 21
    Dernier message: 28/11/2013, 08h08
  4. Création de fichier CSV espace entre les lignes
    Par Rmc_Kay dans le forum Général Python
    Réponses: 2
    Dernier message: 02/04/2012, 15h42
  5. [XL-2007] Trier fichiers excel pour supprimer les doublons
    Par El-Cherubin dans le forum Excel
    Réponses: 3
    Dernier message: 26/06/2009, 15h59

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