Partout où j'ai regardé, j'ai montré des méthodes pour ce faire qui fonctionnent avec des fichiers physiques mais, pour une raison quelconque, pas avec un tableau. Je préfère ne pas avoir ces données stockées, puis appelées à partir d'un fichier et travailler directement avec le tableau si cela est possible. Je suis bloqué en utilisant PowerShell v2 mais cela devrait toujours être faisable. J'apprécie toute aide à l'avance.
J'ai un tableau appelé $net_final
qui a les valeurs suivantes:
63.232.3.102
63.232.3.102
64.339.161.5
64.339.161.5
64.339.161.5
64.339.161.5
64.339.161.5
64.339.161.5
19.19.19.19
19.19.19.19
19.19.19.19
19.19.19.19
19.19.19.19
19.19.19.19
19.19.19.19
63.339.161.7
63.339.161.7
63.339.161.7
63.339.161.7
63.339.161.7
Je fais ensuite ce qui suit pour obtenir une liste d'IP qui se produisent 5 fois ou plus dans ce tableau:
($net_final | Group-Object | Where-Object {$_.Count -ge 5} | Format-Table -HideTableHeaders -Property Name | Out-String).Trim()
Ce qui me donne cette sortie:
64.339.161.5
19.19.19.19
63.339.161.7
Cependant, je n'arrive pas à les séparer par des virgules sur la même ligne. Faire une liste délimitée par des virgules à partir du seul tableau est assez simple avec des choses comme $net_final -Join ","
et ($net_final | Select-Object -Unique) -Join ","
, mais je dois récupérer les éléments du tableau qui se produisent $ N nombre de fois.
Sortie attendue:
64.339.161.5,19.19.19.19,63.339.161.7
Voilà, un joli petit one-liner pour vous:
($net_final|group|?{$_.count -ge 5}|Select -ExpandProperty Name) -join ","
Cela produira:
64.339.161.5,19.19.19.19,63.339.161.7
J'ai rencontré des problèmes avec cette solution de TheMadTechnician, mais j'ai trouvé les travaux suivants excellents: $ my_array -join ","
Encore plus rapide/simple à lire:
$test = (1,3,7,7,3,2,1)
$($test | sort -Unique) -join ","
1,2,3,7
Vous pouvez diriger n'importe quel tableau en tri avec le drapeau -unique à dedupe; la variable encapsulée peut ensuite être jointe à votre délimiteur préféré.