it-swarm.com.de

Powershell - Filterung nach eindeutigen Werten

Ich habe eine CSV-Eingabedatei mit einer Spalte, die ähnliche Informationen wie das nachstehende Beispiel enthält:

805265
995874
805674
984654
332574
339852

Ich möchte einzigartige Werte in ein Array extrahieren, das auf zwei führenden Zeichen basiert.

80, 99, 98, 33

Wie kann ich das mit Powershell erreichen?

20
Temple

Ich würde dazu das Cmdlet Group-Object verwenden:

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

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

Verwenden Sie Select-Object und den Parameter -unique:

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

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

Wenn eine Konvertierung in int erforderlich ist, konvertieren Sie es einfach in [int]:

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

Sie könnten eine Hashtabelle verwenden:

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

$ht = @{}

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

$ht.keys

99
98
33
80
1
mjolinor

Eine andere Option anstelle von Select-Object -unique wäre die Verwendung des Cmdlets Get-Unique (oder seines Alias ​​gu, siehe detaillierte Beschreibung hier ) wie unten gezeigt:

$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

Sie können ein neues Array mit Elementen erstellen, die die ersten beiden Zeichen enthalten, und dann mit Select-Item die eindeutigen Elemente wie folgt angeben:

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