web-dev-qa-db-fra.com

Powershell - filtrage pour des valeurs uniques

J'ai un fichier csv d'entrée avec une colonne contenant des informations similaires à l'exemple ci-dessous:

805265
995874
805674
984654
332574
339852

Je voudrais extraire des valeurs uniques dans un tableau basé sur les 2 premiers caractères afin d'utiliser l'exemple ci-dessus, mon résultat serait:

80, 99, 98, 33

Comment pourrais-je atteindre cet objectif en utilisant PowerShell?

20
Temple

J'utiliserais l'applet de commande Group-Object pour ceci:

 Import-Csv foo.csv | Groupe {$ _. ColumnName.Substring (0,2)} 

 Count Name Group 
----- ---- -----
 2 80 {805265, 805674} 
 1 99 {995874} 
 1 98 {984654} 
 2 33 {332574, 339852} 
15
Keith Hill

Utilisez Select-Object et le paramètre -unique:

$values = 
'805265',
'995874',
'805674',
'984654',
'332574',
'339852'

$values |
  Foreach-Object { $_.Substring(0,2) } |
  Select-Object -unique

Si une conversion en int est nécessaire, il suffit de la convertir en [int]:

$ints = 
  $values |
  Foreach-Object { [int]$_.Substring(0,2) } |
  Select-Object -unique
22
stej

Vous pouvez utiliser une table de hachage:

$values = @(805265,995874,805674,984654,332574,339852)

$ht = @{}

$values |foreach {$ht[$_ -replace '^(..).+','$1']++}

$ht.keys

99
98
33
80
1
mjolinor

Une autre option au lieu d'utiliser Select-Object -unique serait d'utiliser la cmdlet Get-Unique (ou son alias gu, voir la description détaillée de ici ), comme illustré ci-dessous:

$values = @(805265,995874,805674,984654,332574,339852)
$values | % { $_.ToString().Substring(0,2) } | Get-Unique
# or the same using alias
$values | % { $_.ToString().Substring(0,2) } | gu
0
pholpar

Vous pouvez créer un nouveau tableau avec des éléments contenant les deux premiers caractères, puis utiliser Select-Item pour vous donner des éléments uniques comme celui-ci:

$newArray = @()
$csv = import-csv -Path C:\your.csv
$csv | % {
    $newArray += $_.YourColumn.Substring(0,2)
}
$newArray | Select-Object -Unique
0
Andy Arismendi