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 :

Comparaison deux fichier TXT avec code d'action


Sujet :

Scripts/Batch

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Points : 13
    Points
    13
    Par défaut Comparaison deux fichier TXT avec code d'action
    Bonjour,

    Je suis un peu perdu je suis à la recherche de votre aide pour créer un script PowerShell permettant de comparer, extraire les modifications issues de deux fichier txt.
    En effet je reçois un fichier F1 nommé fichier_F1.txt à J+0 . J’ai un autre fichier F1 nommée fichier_F1_vieux à J-1.
    Je souhaiterais comparé les modifications du fichier_F1 et du fichier_F1_vieux et extraire les ajouts, modifications, suppression en fonction du fichier_vieux.
    L’extraction serait en .txt avec l’ajout d’une dernière colonne avec un code d’action 1=ajout 2=modification 3=suppression.

    Dans l’attente de vos lumières je vous remercie

  2. #2
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    Source : https://serverfault.com/questions/55.../951843#951843
    Code Powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    compare-object (get-content 'C:\temp\Test\File1.txt') (get-content 'C:\temp\Test\File2.txt') | format-table | Out-File 'C:\temp\Test\Comparaison.txt'
    Ou bien
    Code Powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    diff (gc 'C:\temp\Test\File1.txt' | % -begin { $ln1=0 } -process { '{0,6}<<:{1}' -f ++$ln1,$_ }) (gc 'C:\temp\Test\File2.txt' | % -begin { $ln2=0 } -process { '{0,6}>>:{1}' -f ++$ln2,$_ }) -property { $_.substring(9) } -passthru | sort | Out-File 'C:\temp\Test\Comparaison.txt'

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Merci c'est exactement ça ! Enfin presque...

    J'ai évolué le script est presque bon comme suit :

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    compare-object $(Get-Content "\Traitement F1\Fichier F1 à traiter\FichierF10.txt") $(Get-content "\Traitement F1\Fichier F1 d'archive\FichierF11.txt")| Sort-Object | Export-Csv "\Traitement F1\Fichier F1 épuré\Comparaison.csv" -NoTypeInformation -Delimiter ';'

    Comment puis-je supprimés les éléments en gras dans mon export csv

    "InputObject" "SideIndicator"
    "NOM;PRENOM;FONCTION"";"=>"

    Afin d'avoir un .csv

    NOM;PRENOM;FONCTION;=>
    NOM;PRENOM;FONCTION;<=

    Merci d'avance

  4. #4
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    J'ai donc trouvé voici pour ceux que sa intéresse :

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    compare-object $(Get-Content "\Traitement F1\Fichier F1 à traiter\FichierF10.txt") $(Get-content "\Traitement F1\Fichier F1 d'archive\FichierF11.txt") | Sort-Object| ConvertTo-Csv -NoTypeInformation | % {$_.Replace('"','')} | Select-Object -Skip 1 | Out-File "\Traitement F1\Fichier F1 épuré\Comparaison.csv"

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Je ferais comme ceci.
    Tu sais que si tu supprime les " tu obtiendra un csv pas forcement cohérent avec la norme (si ta ligne possède un espace ou une virgule par exemple)

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Compare-Object -ReferenceObject (Get-Content -Path "Traitement F1\Fichier F1 à traiter\FichierF10.txt") -DifferenceObject (Get-Content -Path "Traitement F1\Fichier F1 d'archive\FichierF11.txt") -IncludeEqual | Select-Object @{Name="Ligne";Expression={$_.InputObject}}, @{Name="Etat";Expression={$_.SideIndicator -replace "==", "Egal" -replace "=>", "Ajout" -replace "<=", "Suppression"}} | Export-Csv -Path "Traitement F1\Fichier F1 épuré\Comparaison.csv" -NoTypeInformation -Encoding Default

  6. #6
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Merci ericlm128 tu m'aide grandement car le problème peut ce produire.
    Par contre en réfléchissant finalement ce script ne répond pas vraiment à mon but final car je ne peut pas comparer les modifications entre le fichier_ancien et le fichier_nouveau comme le script ne gère pas d'ID unique pour chaque ligne j'ai fais un petit schéma pour vous faire comprendre mon script :

    Nom : fichierf1.PNG
Affichages : 2867
Taille : 40,0 Ko

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Merci pour le schéma.
    Les colonnes a b c d e existe elle vraiment dans vos fichiers ?
    Il faut comparer via le id, mais vous me dite qu'il n'existe pas...

  8. #8
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    En effet toutes les colonnes existent.
    L'ID est en faite la colonne C c'est le seul élément qui ne change jamais entre une ligne du fichier ancien et du fichier à traiter

  9. #9
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    C'est donc un fichier de type csv ?
    Je pourrais en avoir 1 en exemple ?

  10. #10
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Voici. Après réflexion l'ID se trouvera à gauche de chacun de mes fichiers txt et csv (c'est plus pratique pour la lecture) j'ai donc rectifié mon schéma :
    Nom : fichierf1.PNG
Affichages : 2752
Taille : 43,9 Ko

    Fichier11.txtFichier10.txt

  11. #11
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Je te propose ceci

    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
    28
    # Définition des en-têtes
    $Header = 'A', 'B', 'C', 'D', 'E'
     
    # Import des fichiers
    $F1 = Import-Csv -Path "Fichier10.txt" -Encoding Default -Header $Header
    $F2 = Import-Csv -Path "Fichier11.txt" -Encoding Default -Header $Header
     
    # Variable qui servira à stocker le résultat
    $result = @()
     
    # Ajout
    $result += $F2 | Where-Object {$F1.A -notcontains $_.A} | Select-Object *, @{Label="Code d'action";Expression={0}}
     
    # Suppression
    $result += $F1 | Where-Object {$F2.A -notcontains $_.A} | Select-Object *, @{Label="Code d'action";Expression={2}}
     
    # Modification
    $result += foreach($itemF2 in $F2)
    {
        $itemF1 = $F1 | Where-Object {$_.A -eq $itemF2.A}
        if ($itemF1 -ne $null -and (Compare-Object $itemF1.PsObject.Properties $itemF2.PsObject.Properties))
        {
            $itemF2 | Select-Object *, @{Label="Code d'action";Expression={1}}
        }
    }
     
    # Export du résultat trié
    $result | Sort-Object -Property "Code d'action" -Descending | Export-Csv -Path "comparaison.csv" -NoTypeInformation -Encoding Default

  12. #12
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Woaw formidable c'est exactement ça ! Tu es le dieu du powershell
    Celà fonctionne bien pour quelques lignes une dizaine en revanche avec mes 28 000lignes le temps de traitements est très long je ne sais pas si on peut améliorer ça comme par exemple avec un traitement par lot

  13. #13
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Il me faudrait les fichiers en exemple.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Je vous est simulé un fichier d'exemple de 28 000 lignes
    ( ce sont des données d'exemples généré grâce à des listes de nom,prénom, métier,code métier ect issue du site data.gouv.fr) je ne peux pas vous donner le vrai document vu que c'est une base RH.
    Merci en tout cas de votre aide !
    test12.zip

  15. #15
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Oui mais il faut 2 fichier pour comparer.

  16. #16
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Voici évidemment
    testfichier.zip

  17. #17
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    L'ancien script mettait combien de temps ?

  18. #18
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Il mettait bien 4 à 5H hier, je n'ai pas du coup fait de bench sur le script

  19. #19
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Oui c'est un peu long

    Voici un code plus optimisé.
    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
    # Définition des en-têtes
    $Header = 'A', 'B', 'C', 'D', 'E'
     
    # Import des fichiers
    $F1 = Import-Csv -Path "Fichier10.txt" -Encoding Default -Header $Header
    $F2 = Import-Csv -Path "fichier11.txt" -Encoding Default -Header $Header
     
    # Variable qui servira à stocker le résultat
    $result = @()
     
    # Récupère les différences d'ID (ajout, suppression)
    # Et stock dans $F1 et $F2 le statut SideIndicator pour les objects découverts, via le paramètre PassThru
    $result = (Compare-Object -ReferenceObject $F1 -DifferenceObject $F2 -Property A -PassThru) | Select-Object A, B, C, D, E, @{Label="Code d'action";Expression={if($_.SideIndicator -eq "=>"){0}else{2}}}
     
    # Récupère les modifications pour les doublons d'ID en comparant toutes les propriétés (A, B, C, D, E)
    $result += (Compare-Object -ReferenceObject @($F1 | Where-Object {$_.SideIndicator -eq $null}) -DifferenceObject @($F2 | Where-Object {$_.SideIndicator -eq $null}) -Property A, B, C, D, E -ErrorAction SilentlyContinue) | Where-Object {$_.SideIndicator -eq "=>"} | Select-Object A, B, C, D, E, @{Label="Code d'action";Expression={1}}
     
    # Export du résultat trié
    $result | Sort-Object -Property "Code d'action" -Descending | Export-Csv -Path "comparaison.csv" -NoTypeInformation -Encoding Default

  20. #20
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Mince ton délimiteur à changé il faut ajouter -Delimiter ";" sur les Import-Csv

Discussions similaires

  1. Code VBA afin de croiser deux fichiers excel avec un SI et un rechercher V
    Par rodriguez nzuzi dans le forum Général VBA
    Réponses: 1
    Dernier message: 12/12/2015, 01h16
  2. [PowerShell] Comparaison de caractere ou mot dans deux fichiers txt en powershell
    Par sanched dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 30/07/2015, 17h15
  3. [Python 3.X] Comparaison de deux fichiers txt avec une reponse IDENTIQUE: oui ou non
    Par pascaljqt dans le forum Général Python
    Réponses: 5
    Dernier message: 28/07/2015, 23h09
  4. Comparaison deux fichiers avec cobol
    Par Babylone159 dans le forum Cobol
    Réponses: 5
    Dernier message: 03/09/2012, 12h36
  5. comparaison de deux fichiers textes avec un script python
    Par zekruss dans le forum Général Python
    Réponses: 1
    Dernier message: 10/11/2009, 05h52

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