PowerShell : comment trier un csv et supprimer les doublons

Découvrez comment trier et supprimer les doublons d’un csv en 1 clic avec PowerShell avec en prime une astuce pour conserver les quotes de votre csv original

C’est officiel , Zennoposter n’apprécie pas les manipulations sur des tables de plus de 200 000 lignes 😉

je sais , j’ai un peu abusé mais c’était l’occasion de tester un peu la bête à son maximum , du coup je n’ai pas eu trop le choix :

– soit je faisais un mini programme en C# indépendant en ligne de commande pour interagir avec zenno
– soit je profitais de l’occasion pour tester le « PowerShell » inclus dans windows à partir de la version 7 (et téléchargeable pour ceux qui possède une ancienne version de Windows)

Pour fonctionner , vous pouvez soit utiliser le PowerShell en ligne de commande ou créer des scripts (afin de les réutiliser).

Pour lancer le logiciel , allez dans le menu « exécuter » en bas à gauche de votre windows et tapez « PowerShell » , vous devriez avoir une belle fenêtre bleue.

Si vous voulez utiliser les scripts n’oubliez pas d’activer la fonctionnalité (désactivée par défaut) en tapant « Set-ExecutionPolicy RemoteSigned » dans PowerShell et validez votre choix.

PowerShell gère les fichiers CSV en natif

Pour commencer créez un nouveau fichier texte que vous renommerez « Script.PS1 » (vous pouvez aussi taper les commandes directement dans la console PowerShell au lieu d’utiliser un script).

$OriginalFile = "C:\chemin_vers_mon_csv\fichier.csv"
$ExportFile = "C:\chemin_vers_mon_csv\fichier2.csv"

On précise le chemin vers le fichier original dans $OriginalFile et le chemin vers le fichier trié dans $ExportFile

Import-Csv $OriginalFile -Encoding UTF8 -Delimiter ';'| Sort-Object Nom-de-la-colonne 2 –Unique| Export-Csv -Path $ExportFile -NoTypeInformation -Encoding UTF8 -Delimiter ';' -Force

Si le fichier est encodé en UTF-8 on le précise aussi (en source et en sortie) et on précise le séparateur (ici ; )

Sort-Object Nom-de-la-colonne 2 –Unique

Ici on précise que l’on veut trier le csv sur la colonne 2 et -Unique sert à supprimer les champs en double (à supprimer si pas besoin)

Par défaut le logiciel nous trie le csv par ordre alphabétique (-Ascending ) si vous souhaitez un tri inverse il vous suffit de rajouter -Descending avant -Unique et

– Force sert à écraser le fichier de sorti si celui-ci existe déjà.

What the quote !

Le problème avec PowerShell c’est qu’il respecte les standards 🙂 et moi j’ai horreur des  » dans un csv sauf si vraiment c’est nécessaire (oui je sais mais on ne me refera pas ^^)

En tapant « PowerShell csv sort without quote » sur Google il y a pas mal de tuto pour apprendre à les supprimer mais le truc c’est que ça supprime TOUS les quotes du csv (aussi bien ceux que l’on ne veut pas que ceux présent dans les champs du csv.

En gros la commande remplace les « quotes » par « rien » , du coup j’ai eu l’idée de remplacer tous les quotes de mon csv original par des ♥ (désolé il me fallait un caractère dont je sois sûr qu’il ne sera pas dans le csv 😉
Comme ça on trie , on supprime tous les  » rajoutés par PowerShell et à la fin je convertis tous les ♥ en  » et le tour est joué.

Voici le script complet que j’ai utilisé :

$OriginalFile = "C:\chemin_vers_mon_csv\fichier.csv"
$ExportFile = "C:\chemin_vers_mon_csv\fichier2.csv"
gc $OriginalFile  | % {$_ -replace '"', "♥"} | out-file $ExportFile  -Fo -En UTF8
Import-Csv $ExportFile -Encoding UTF8 -Delimiter ';'| Sort-Object Urls –Unique| Export-Csv -Path $OriginalFile -NoTypeInformation -Encoding UTF8 -Delimiter ';' -Force
gc $OriginalFile  | % {$_ -replace '"', ""} | out-file $ExportFile  -Fo -En UTF8
gc $ExportFile  | % {$_ -replace "♥", '"'} | out-file $OriginalFile  -Fo -En UTF8

Niveau performance , PowerShell traite un fichier de 200 000 lignes (avec 3 traitements) en à peine 1 minute 30.

J’espère que ce script vous aidera , n’hésitez pas à me donner votre avis en commentaire

Enjoy !

Laissez un commentaire.