Powershell - фильтрация уникальных значений - PullRequest
20 голосов
/ 22 марта 2012

У меня есть входной CSV-файл со столбцом, содержащим информацию, аналогичную приведенной ниже:мой результат будет:

80, 99, 98, 33

Как я могу добиться этого с помощью powershell?

Ответы [ 5 ]

22 голосов
/ 22 марта 2012

Используйте Select-Object и параметр -unique:

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

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

Если необходимо преобразование в int, просто приведите его к [int]:

$ints = 
  $values |
  Foreach-Object { [int]$_.Substring(0,2) } |
  Select-Object -unique
15 голосов
/ 22 марта 2012

Я бы использовал для этого командлет Group-Object:

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}
1 голос
/ 22 марта 2012

Вы можете использовать хеш-таблицу:

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

$ht = @{}

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

$ht.keys

99
98
33
80
0 голосов
/ 17 октября 2018

Еще одним вариантом вместо использования Select-Object -unique будет использование командлета Get-Unique (или его псевдоним gu, см. Подробное описание здесь ), как показано ниже:

$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 голосов
/ 22 марта 2012

Вы можете создать новый массив с элементами, содержащими первые два символа, а затем использовать Select-Item, чтобы дать вам такие уникальные элементы:

$newArray = @()
$csv = import-csv -Path C:\your.csv
$csv | % {
    $newArray += $_.YourColumn.Substring(0,2)
}
$newArray | Select-Object -Unique
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...