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?
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}
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
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
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
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