Question
Regrouper des lignes avec powershell
- Cabanne
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 11 ans 6 mois #18051
par Cabanne
Regrouper des lignes avec powershell a été créé par Cabanne
Bonjour à toutes et tous,
voila j'ai, comme vous vous en doutez un petit souci.
Je cherche a regrouper des ligne d'un fichier par lot de 3.
mon fchier est du style
pc1
mac
ip
pc2
mac
ip
....
Je recherche à avoir un fichier du style
pc1,mac,ip
pc2,mac,ip
...
La finalité de la chose est de pourvoir créer un fichier csv de 3 colonnes.
Je traitais se genre de probleme avec une commande unix comme \"awk 'NR%3 {a = (a \" \" $0)} NR%3 == 0 {print a, $0; a=\";\"}' formatfic.todo >> test1\"
Mais bien sur j'ai décider de le faire sous powershell qui je dois le dire est beaucoup plus puissant.
Merci à vous
voila j'ai, comme vous vous en doutez un petit souci.
Je cherche a regrouper des ligne d'un fichier par lot de 3.
mon fchier est du style
pc1
mac
ip
pc2
mac
ip
....
Je recherche à avoir un fichier du style
pc1,mac,ip
pc2,mac,ip
...
La finalité de la chose est de pourvoir créer un fichier csv de 3 colonnes.
Je traitais se genre de probleme avec une commande unix comme \"awk 'NR%3 {a = (a \" \" $0)} NR%3 == 0 {print a, $0; a=\";\"}' formatfic.todo >> test1\"
Mais bien sur j'ai décider de le faire sous powershell qui je dois le dire est beaucoup plus puissant.
Merci à vous
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 11 ans 6 mois #18052
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Regrouper des lignes avec powershell
Salut,
une solution construisant des objets :
[code:1]
$File='c:\temp\datas.txt'
@'
pc1
mac
ip
pc2
mac2
ip2
pc3
mac3
ip3
'@ > $File
#Attention à la taille du fichier
$Lines=Get-Content $File
While ($Lines.count -gt 0)
{
#Affectation multiple à partir d'une collection
#Lines reçoit le reste de la collection
$L1,$L2,$L3,$Lines=$Lines
Write-Warning \"L1= $L1\"
Write-Warning \"L2= $L2\"
Write-Warning \"L3= $L3`r`n\"
New-Object PSObject @{Name=$L1;Mac=$L2;IP=$l3}
}
[/code:1]
Autre approche lire ligne par ligne avec les API dotnet.
une solution construisant des objets :
[code:1]
$File='c:\temp\datas.txt'
@'
pc1
mac
ip
pc2
mac2
ip2
pc3
mac3
ip3
'@ > $File
#Attention à la taille du fichier
$Lines=Get-Content $File
While ($Lines.count -gt 0)
{
#Affectation multiple à partir d'une collection
#Lines reçoit le reste de la collection
$L1,$L2,$L3,$Lines=$Lines
Write-Warning \"L1= $L1\"
Write-Warning \"L2= $L2\"
Write-Warning \"L3= $L3`r`n\"
New-Object PSObject @{Name=$L1;Mac=$L2;IP=$l3}
}
[/code:1]
Autre approche lire ligne par ligne avec les API dotnet.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Cabanne
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 11 ans 6 mois #18054
par Cabanne
Réponse de Cabanne sur le sujet Re:Regrouper des lignes avec powershell
Merci
ta solution fonctionne mais quand je la redirige vers un fichier j’obtiens un fichier du style
ip 192.....
Name poste1
Mac 00:00:00:00:00
ip 192.....
Name poste1
Mac 00:00:00:00:00
Le problème c'est que je débute dans powershell et que je n’arrive pas à rediriger le résultat sous la forme
ip, name, mac
ip, name, mac
....
Merci encore
ta solution fonctionne mais quand je la redirige vers un fichier j’obtiens un fichier du style
ip 192.....
Name poste1
Mac 00:00:00:00:00
ip 192.....
Name poste1
Mac 00:00:00:00:00
Le problème c'est que je débute dans powershell et que je n’arrive pas à rediriger le résultat sous la forme
ip, name, mac
ip, name, mac
....
Merci encore
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 11 ans 6 mois #18055
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Regrouper des lignes avec powershell
Essaie ceci :
[code:1]
$Lines=get-content $File
$Result=While ($Lines.count -gt 0){
$L1,$L2,$L3,$Lines=$Lines
Write-Warning \"L1= $L1\"
Write-Warning \"L2= $L2\"
Write-Warning \"L3= $L3`r`n\"
New-Object PSObject -property @{Name=$L1;Mac=$L2;IP=$l3}
}
$Result|Export-csv 'c:\temp\Datas.csv' -NoTypeInformation
Type 'c:\temp\Datas.csv'
[/code:1]
[code:1]
$Lines=get-content $File
$Result=While ($Lines.count -gt 0){
$L1,$L2,$L3,$Lines=$Lines
Write-Warning \"L1= $L1\"
Write-Warning \"L2= $L2\"
Write-Warning \"L3= $L3`r`n\"
New-Object PSObject -property @{Name=$L1;Mac=$L2;IP=$l3}
}
$Result|Export-csv 'c:\temp\Datas.csv' -NoTypeInformation
Type 'c:\temp\Datas.csv'
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Cabanne
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 11 ans 6 mois #18059
par Cabanne
Réponse de Cabanne sur le sujet Re:Regrouper des lignes avec powershell
Génial cela fonctionne, je vais maintenant essayé de décortiquer le ptit bout de script au besoin je te demanderais conseille.
Merci encore pour le temps que tu as pris pour me répondre
@+
Merci encore pour le temps que tu as pris pour me répondre
@+
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 11 ans 6 mois #18067
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Regrouper des lignes avec powershell
Une autre approche plus verbeuse, mais plus efficace sur des fichiers contenant un nombre de ligne important :
[code:1]
function New-NetWorkInformation {
param(
[ValidateNotNullOrEmpty()]
[Parameter(Position=0,Mandatory=$True,ValueFromPipeline=$True, ParameterSetName=\"Path\"«»)]
[string] $Line
)
begin {
$Step=3
$I=1
$Count=0
}
process {
switch ($I)
{
1 { $L1=$Line ;Write-Debug \"L1= $L1\";$I++ ;$Count++ }
2 { $L2=$Line ;Write-Debug \"L2= $L2\";$I++;$Count++ }
3 {
$L3=$Line ;Write-Debug \"L2= $L2\"
New-Object PSObject -property @{Name=$L1;Mac=$L2;IP=$L3}
$I=1
$Count++
}
}
}
end {
if ( ($Count % $Step) -ne 0 )
{Throw \"Le fichier ne contient pas un nombre de ligne suffisant\" }
}
}#New-NetWorkInformation
$File='c:\temp\datas.txt'
Get-Content $File|
New-NetWorkInformation |
Export-csv 'c:\temp\Datas.csv' -NoTypeInformation
Type 'c:\temp\Datas.csv'
[/code:1]
La version précédente nécessite moins de code, mais suppose que le nombre de ligne est suffisant. Et surtout elle reconstruit un tableau à chaque itération.
[code:1]
function New-NetWorkInformation {
param(
[ValidateNotNullOrEmpty()]
[Parameter(Position=0,Mandatory=$True,ValueFromPipeline=$True, ParameterSetName=\"Path\"«»)]
[string] $Line
)
begin {
$Step=3
$I=1
$Count=0
}
process {
switch ($I)
{
1 { $L1=$Line ;Write-Debug \"L1= $L1\";$I++ ;$Count++ }
2 { $L2=$Line ;Write-Debug \"L2= $L2\";$I++;$Count++ }
3 {
$L3=$Line ;Write-Debug \"L2= $L2\"
New-Object PSObject -property @{Name=$L1;Mac=$L2;IP=$L3}
$I=1
$Count++
}
}
}
end {
if ( ($Count % $Step) -ne 0 )
{Throw \"Le fichier ne contient pas un nombre de ligne suffisant\" }
}
}#New-NetWorkInformation
$File='c:\temp\datas.txt'
Get-Content $File|
New-NetWorkInformation |
Export-csv 'c:\temp\Datas.csv' -NoTypeInformation
Type 'c:\temp\Datas.csv'
[/code:1]
La version précédente nécessite moins de code, mais suppose que le nombre de ligne est suffisant. Et surtout elle reconstruit un tableau à chaque itération.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.048 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Regrouper des lignes avec powershell