2012-03-22 16 views
17

Ho un file CSV di input con una colonna contenente informazioni simili al campione di seguito:PowerShell - filtro per valori unici

805265 
995874 
805674 
984654 
332574 
339852 

vorrei estrarre i valori unici in un array in base a porta 2 caratteri così utilizzando l'esempio sopra il mio risultato sarebbe:

80, 99, 98, 33

Come potrei farlo con PowerShell?

risposta

12

userei il Group-Object cmdlet per questo:

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

Count Name      Group 
----- ----      ----- 
    2 80      {805265, 805674} 
    1 99      {995874} 
    1 98      {984654} 
    2 33      {332574, 339852} 
+0

Sono abbastanza nuovo a PowerShell e non conoscevo questo cmdlet. Grazie per la tua risposta ... sono in grado di consolidare alcuni passaggi utilizzando questo. Brillante! – Temple

20

Usa Select-Object e il parametro -unique:

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

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

Se è necessaria la conversione a int, poi basta gettarlo ai [int]:

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

si potrebbe fare un nuovo array con gli oggetti che contengono le prime due caratteri e quindi utilizzare Select-Item per darvi gli oggetti unici come questo:

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

si potrebbe utilizzare una tabella hash:

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

$ht = @{} 

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

$ht.keys 

99 
98 
33 
80 
Problemi correlati