Question
Aide sur le tri et doublons dans un fichier
- CHRETIEN
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 1
- Remerciements reçus 0
il y a 15 ans 5 mois #7935
par CHRETIEN
Aide sur le tri et doublons dans un fichier a été créé par CHRETIEN
Bonjour,
Je cherche à un trier un fichier CSV (le delimiter est le point virgule) ayant ce format là :
Nom hote IP Espace Disk Date inventaire
Poste1 166.69.1.104 2345 17/10/2010 12:13
Poste2 166.69.1.106 123 12/10/2010 17:43
Poste2 166.69.1.106 54687 13/10/2010 10:00
Poste1 166.69.1.104 675 15/10/2010 11:13
Poste3 166.69.1.116 7876 08/10/2010 14:43
Poste1 166.69.1.104 2345 16/10/2010 16:20
Poste4 166.69.1.118 8755 08/09/2010 11:20
Je voudrais qu'il soit trié sur le premier champ et qu'il n'y ai pas de doublons. Jusqu'à là je crois savoir comment faire, un truc dans ce genre là:
Get-content $file_entree | Sort-Object | Get-Unique > $file_sortie
Mais la difficulté se trouve au niveau de la date, parmi les doublons, j'aimerai que le poste ayant la date d'inventaire la plus élevée ressorte.
ce qui nous donnerait en sortie :
Nom hote IP Espace Disk Date inventaire
Poste1 166.69.1.104 2345 17/10/2010 12:13
Poste2 166.69.1.106 54687 13/10/2010 10:00
Poste3 166.69.1.116 7876 08/10/2010 14:43
Poste4 166.69.1.118 8755 08/09/2010 11:20
Merci de votre aide, vous me rendriez un grand service !
A+ et bon dimanche
Nico<br><br>Message édité par: NICOBOX, à: 17/10/10 12:26
Je cherche à un trier un fichier CSV (le delimiter est le point virgule) ayant ce format là :
Nom hote IP Espace Disk Date inventaire
Poste1 166.69.1.104 2345 17/10/2010 12:13
Poste2 166.69.1.106 123 12/10/2010 17:43
Poste2 166.69.1.106 54687 13/10/2010 10:00
Poste1 166.69.1.104 675 15/10/2010 11:13
Poste3 166.69.1.116 7876 08/10/2010 14:43
Poste1 166.69.1.104 2345 16/10/2010 16:20
Poste4 166.69.1.118 8755 08/09/2010 11:20
Je voudrais qu'il soit trié sur le premier champ et qu'il n'y ai pas de doublons. Jusqu'à là je crois savoir comment faire, un truc dans ce genre là:
Get-content $file_entree | Sort-Object | Get-Unique > $file_sortie
Mais la difficulté se trouve au niveau de la date, parmi les doublons, j'aimerai que le poste ayant la date d'inventaire la plus élevée ressorte.
ce qui nous donnerait en sortie :
Nom hote IP Espace Disk Date inventaire
Poste1 166.69.1.104 2345 17/10/2010 12:13
Poste2 166.69.1.106 54687 13/10/2010 10:00
Poste3 166.69.1.116 7876 08/10/2010 14:43
Poste4 166.69.1.118 8755 08/09/2010 11:20
Merci de votre aide, vous me rendriez un grand service !
A+ et bon dimanche
Nico<br><br>Message édité par: NICOBOX, à: 17/10/10 12:26
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 15 ans 5 mois #7936
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Aide sur le tri et doublons dans un fichier
Salut,
si tu géres tes informations comme du texte, étant donnée que c'est du CSV, le tri sur la date ne pourra se faire car son extraction est incertaine.
Une solution, on importe le contenu du fichier en tant qu'objet, on crée un objet personnalisés avec des champs typés, puis on les traite avec les cmdlets de base.
[code:1]
#Importe des lignes et construit une liste d'objets personnalisé
$Infos=Import-csv \"test.txt\" -delimiter \";\"|
Foreach {
New-object PSObject -Property @{
# On type les champs pour le tri
Poste=[string]$_.Poste;IP=[IPAddress]$_.ip;truc=$_.truc;date=$_.date -as [DateTime]
}
}
#Récupére le poste le plus récent
$Result=$Infos|
#On regoupe les objets par le champ Poste
#chaque groupe concerne 1 seul poste
Group-Object poste|
Foreach {
#Tri le groupe sur le champs date et sélectionne le premier de la liste
$_.group|
Sort Date -Descending|
Select-Object -First 1
}[/code:1]
En une seule passe
[code:1]
#Importe des lignes et construit une liste d'objets personnalisé
$Result=Import-csv \"test.txt\" -delimiter \";\"|
Foreach {
New-object PSObject -Property @{
Poste=[string]$_.Poste;IP=[IPAddress]$_.IP;Truc=$_.Truc;date=$_.Date -as [DateTime]}
}|
Group-Object Poste|
Foreach {
$_.group|
Sort Date -Descending|
Select-Object -First 1
}
#contrôle du résultat
$Infos|Group Poste|% {Write-Host (\"-\" * 80);$_.group}
$Result[/code:1]
La version sans créer d'objets personnalisés, tous les champs sont dans ce cas de type [String] :
[code:1]
$Result=Import-csv \"test.txt\" -delimiter \";\"|
Group-Object Poste|
Foreach {
$_.group|
Sort Date -Descending|
Select-Object -First 1
}
[/code:1]
Il peut y avoir d'autres solutions.
si tu géres tes informations comme du texte, étant donnée que c'est du CSV, le tri sur la date ne pourra se faire car son extraction est incertaine.
Une solution, on importe le contenu du fichier en tant qu'objet, on crée un objet personnalisés avec des champs typés, puis on les traite avec les cmdlets de base.
[code:1]
#Importe des lignes et construit une liste d'objets personnalisé
$Infos=Import-csv \"test.txt\" -delimiter \";\"|
Foreach {
New-object PSObject -Property @{
# On type les champs pour le tri
Poste=[string]$_.Poste;IP=[IPAddress]$_.ip;truc=$_.truc;date=$_.date -as [DateTime]
}
}
#Récupére le poste le plus récent
$Result=$Infos|
#On regoupe les objets par le champ Poste
#chaque groupe concerne 1 seul poste
Group-Object poste|
Foreach {
#Tri le groupe sur le champs date et sélectionne le premier de la liste
$_.group|
Sort Date -Descending|
Select-Object -First 1
}[/code:1]
En une seule passe
[code:1]
#Importe des lignes et construit une liste d'objets personnalisé
$Result=Import-csv \"test.txt\" -delimiter \";\"|
Foreach {
New-object PSObject -Property @{
Poste=[string]$_.Poste;IP=[IPAddress]$_.IP;Truc=$_.Truc;date=$_.Date -as [DateTime]}
}|
Group-Object Poste|
Foreach {
$_.group|
Sort Date -Descending|
Select-Object -First 1
}
#contrôle du résultat
$Infos|Group Poste|% {Write-Host (\"-\" * 80);$_.group}
$Result[/code:1]
La version sans créer d'objets personnalisés, tous les champs sont dans ce cas de type [String] :
[code:1]
$Result=Import-csv \"test.txt\" -delimiter \";\"|
Group-Object Poste|
Foreach {
$_.group|
Sort Date -Descending|
Select-Object -First 1
}
[/code:1]
Il peut y avoir d'autres solutions.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 15 ans 4 mois #7978
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Aide sur le tri et doublons dans un fichier
J'arrive après la bataille, mais comme moi aussi ça fait un bail que je n'ai pas posté sur ce forum, je commence doucement... 
Une façon de faire alternative :
[code:1]
import-csv <fichier> -delim \";\" | sort \"nom hote\",{$_.\"date inventaire\" -as [datetime]} | sort \"nom hote\" -unique
[/code:1]
En gros, il suffit d'indiquer au moment du tri que le champ \"date inventaire\" doit être pris en compte comme une date. Il faut refaire un tri dans la foulée pour pouvoir extraire l'élément unique pour chaque poste.
Si c'est bien ça qui était demandé ?...
Sur ce, bonne nuit les petits,
Janel
Une façon de faire alternative :
[code:1]
import-csv <fichier> -delim \";\" | sort \"nom hote\",{$_.\"date inventaire\" -as [datetime]} | sort \"nom hote\" -unique
[/code:1]
En gros, il suffit d'indiquer au moment du tri que le champ \"date inventaire\" doit être pris en compte comme une date. Il faut refaire un tri dans la foulée pour pouvoir extraire l'élément unique pour chaque poste.
Si c'est bien ça qui était demandé ?...
Sur ce, bonne nuit les petits,
Janel
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.039 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Aide sur le tri et doublons dans un fichier