2012-03-22 37 views
17

Tengo un archivo CSV de entrada con una columna que contiene información similar al ejemplo siguiente:Powershell - filtrado de valores únicos

805265 
995874 
805674 
984654 
332574 
339852 

me gustaría extraer valores únicos en una matriz basada en los más importantes por lo 2 caracteres utilizando la muestra por encima de mi resultado sería:

80, 99, 98, 33

¿Cómo puede lograr esto utilizando PowerShell?

Respuesta

12

me gustaría usar el cmdlet Group-Object para esto:

 
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

Soy bastante nuevo en PowerShell y no sabía nada de este cmdlet. Gracias por su respuesta ... puedo consolidar bastantes pasos usando esto. ¡Brillante! – Temple

20

Uso Select-Object y el parámetro -unique:

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

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

Si es necesaria la conversión a int, entonces simplemente echarlo a [int]:

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

se puede hacer una nueva matriz con los objetos que contienen los dos primeros caracteres y luego use Select-Item para darle los elementos únicos como este:

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

podría usar una tabla hash:

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

$ht = @{} 

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

$ht.keys 

99 
98 
33 
80 
Cuestiones relacionadas