Question
Tri des doublons dans un fichier CSV.
- Dwelatha
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 11
- Remerciements reçus 0
J'aimerai avoir votre aide concernant le tri de doublons dans un fichier csv d'une centaine de lignes maximum.
Mon fichier comporte les entêtes suivantes:
Dernière communication,GUID,Nom du système
03/03/14 18:48:28,0848BBA6-D010-45B9-8979-2B7FD90F431B,POSTE1
04/03/14 15:38:54,1D6E5669-5E64-4658-A140-BF45914E035C,POSTE1
24/02/14 16:10:49,4F80CE89-5BF0-4DC5-BC05-3C018A558F21,POSTE1
04/03/14 14:28:41,ADDF222B-807D-4A32-AE27-4CF20933FF5B,POSTE1
19/02/14 16:04:43,3B0C4D8B-CA35-467B-9B9B-7789309F68BA,POSTE2
04/03/14 14:38:20,38FB8723-AA89-434B-A8E1-09A8A83D88D1,POSTE2
27/02/14 17:36:24,02FF2A5E-A46F-4006-BEE2-01F336FCE0D0,POSTE2
Le but de ce tri serait de conserver les dates de communications les plus anciennes afin de les rediriger dans un autre csv ou tout simplement dans un fichier texte.
Exemple: garder les information en gras.
Dernière communication,GUID,Nom du système
03/03/14 18:48:28,0848BBA6-D010-45B9-8979-2B7FD90F431B,POSTE1
04/03/14 15:38:54,1D6E5669-5E64-4658-A140-BF45914E035C,POSTE1
24/02/14 16:10:49,4F80CE89-5BF0-4DC5-BC05-3C018A558F21,POSTE1
04/03/14 14:28:41,ADDF222B-807D-4A32-AE27-4CF20933FF5B,POSTE1
19/02/14 16:04:43,3B0C4D8B-CA35-467B-9B9B-7789309F68BA,POSTE2
04/03/14 14:38:20,38FB8723-AA89-434B-A8E1-09A8A83D88D1,POSTE2
27/02/14 17:36:24,02FF2A5E-A46F-4006-BEE2-01F336FCE0D0,POSTE2
Savez vous comment puis je procéder ?
Tout en sachant que je ne maitrise pas le PowerShell
Vous remerciant par avance pour votre aide.
Dwelatha.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Dwelatha écrit:
Regrouper les dates sans les heures puis trier les dates avec les heures :Savez vous comment puis je procéder ?
[code:1]
$Old=@()
$new=@()
$O=import-csv c:\temp\datas.csv|
select-object @{Name='DernièreCommunication';E={$_.DernièreCommunication -as [datetime]}},guid,NomDuSystème|
select-object *,@{name='date';e={$_.DernièreCommunication.Date}}|
Group-Object -Property Date|
foreach {
$L=@($_.Group|Sort DernièreCommunication)
$old +=$L[0]
if ($L.count -gt 1)
{$new +=$L[1..$($L.count-1)] }
}
$old
Write-Host ('-'*40)
$new
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 6/03/14 09:24
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Dwelatha
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 11
- Remerciements reçus 0
Merci pour votre réponse.
Je jette à œil a votre proposition de code et essaye de m'en inspirer.
Je ne manquerai pas de revenir vers vous en cas de souci
Merci encore.
Dwelatha.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
[code:1]
{$new +=$L[1..$($L.count-1)] }
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Dwelatha
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 11
- Remerciements reçus 0
[code:1]$Old=@()
$new=@()
$Dcom = \"Dernière Communication\"
$Guid = \"GUID de l'agent\"
$Name = \"Nom Du Système\"
$Input = import-csv .\doublons.csv -delim \",\"|
select-object @{Name=$Dcom;expression={$_.$Dcom -as [datetime]}},$Guid,$Name |
select-object *,@{name='Date';expression={$_.$Dcom.Date}}|
Group-Object -Property Date|
foreach {
$L=@($_.Group|Sort $Dcom)
$old +=$L[0]
if ($L.count -gt 1)
{$new +=$L[1..$($L.count-1)] }
}
$new
Write-Host ('-'*40)
Write-Host 'Ancienne communication'
$old[/code:1]
Cela fonctionne dans l'ensemble mais j'ai quelques questions
Dans ma console powershell, je me retrouve donc avec les éléments suivants en sortie.
- En vert, les informations étant correctement reportés comme étant la plus vieille date de communication.
- En orange, les informations devant être considérées comme ancienne également mais pour lesquelles le code ne fonctionne pas apparemment.
- En violet, les informations étant ok concernant la date de communication la plus récente.
Dernière Communication GUID de l'agent Nom du système Date
----
06/03/2014 10:16:38 8F1F0810-CF83-4F40-AD1A-E99A73830C4D POSTE1 06/03/2014 00:00:00
06/03/2014 10:52:27 8DB63758-64C1-42A6-B15A-7CEAB3B909C7 POSTE1 06/03/2014 00:00:00
06/03/2014 11:08:03 30126CF9-468B-4D51-AE0F-E28EAEC7C418 POSTE2 06/03/2014 00:00:00
06/03/2014 11:44:04 077F3E1D-2E27-44E9-8285-F59244427A45 POSTE3 06/03/2014 00:00:00
06/03/2014 12:35:49 98498F7E-1251-4607-9364-1732E8217891 POSTE4 06/03/2014 00:00:00
06/03/2014 12:37:53 FFAA71C5-BEC0-4073-A79E-2049177DC445 POSTE3 06/03/2014 00:00:00
06/03/2014 14:00:11 99D948A6-0862-4B15-9206-45933E1AB63D POSTE5 06/03/2014 00:00:00
06/03/2014 14:00:57 7F2DC6F3-6EC0-4795-8BEC-A0AA59238C3F POSTE5 06/03/2014 00:00:00
03/03/2014 22:43:05 9AFD43F8-2E45-486A-BA99-E44A587A7F26 POSTE6 03/03/2014 00:00:00
Ancienne communication
06/03/2014 10:13:19 A7E53BD2-6E91-4C73-AAFD-3CA0F4085252 POSTE6 06/03/2014 00:00:00
24/02/2014 10:43:53 EC86E11D-CE5F-46F0-BC12-5725EF372A42 POSTE2 24/02/2014 00:00:00
03/03/2014 17:49:13 AF7457CC-BB07-4FB6-84A9-2E4D27782A76 POSTE4 03/03/2014 00:00:00
Questions:
1/ Je remarque que le champs date est tout le temps à J/M/Année 00:00:00 est ce normal ?
2/ Lorsque la communication diffère de quelques secondes sur le même jour, le tri n'a pas l'air de s'effectuer et je n'arrive pas à comprendre pourquoi.
Pour résumer, cela fonctionne pour les postes 2 et 4.
Il y une inversion concernant le poste 6.
Les postes 1, 3 et 5 ne semble pas être trier car sur le même jour mais à des heures différentes.
Espérant être clair.
Je vous remercie par avance pour votre aide.
Dwelatha.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Cet ensemble ne peut répondre qu'aux spécifications énoncées et celles-ci manquaient de précisions.Cela fonctionne dans l'ensemble mais j'ai quelques questions
Dwelatha écrit:
Oui, j'ai interprété le pb, car le critère de tri n'était pas spécifié. Le champ Date sert uniquement à regrouper les dates d'un jour donné sans tenir compte de la partie heure.1/ Je remarque que le champs date est tout le temps à J/M/Année 00:00:00 est ce normal ?
Dwelatha écrit:
idem, à specs floues, résultats flous.2/ Lorsque la communication diffère de quelques secondes sur le même jour, le tri n'a pas l'air de s'effectuer et je n'arrive pas à comprendre pourquoi.
Dwelatha écrit:
Sur forum d'entraide, on aide sur des questions technique précise :Je vous remercie par avance pour votre aide.
Dwelatha écrit:
On ne peut plus.Espérant être clair.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Tri des doublons dans un fichier CSV.