Ответ 1
Для этого я использовал бы Group-Object
(псевдоним group
):
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}
У меня есть входной CSV файл со столбцом, содержащим информацию, подобную приведенной ниже:
805265
995874
805674
984654
332574
339852
Я хотел бы извлечь уникальные значения в массив, основанный на первых двух символах, поэтому, используя приведенный выше пример, я получу:
80, 99, 98, 33
Как я могу добиться этого с помощью PowerShell?
Для этого я использовал бы Group-Object
(псевдоним group
):
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}
Используйте 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
Вы можете использовать хеш-таблицу:
$values = @(805265, 995874, 805674, 984654, 332574, 339852)
$ht = @{}
$values | foreach {$ht[$_ -replace '^(..).+','$1']++}
$ht.keys
99
98
33
80
Вы можете создать новый массив с элементами, содержащими первые два символа, а затем использовать Select-Object
, чтобы получить такие уникальные элементы, как этот:
$newArray = @()
$csv = Import-Csv -Path C:\your.csv
$csv | % {
$newArray += $_.YourColumn.Substring(0, 2)
}
$newArray | Select-Object -Unique
Еще один вариант вместо использования Select-Object -unique
- использовать командлет Get-Unique (или его псевдоним gu
; см. подробное описание здесь), как показано ниже:
$values = @(805265, 995874, 805674, 984654, 332574, 339852)
$values | % { $_.ToString().Substring(0,2) } | Get-Unique
# Or the same using the alias
$values | % { $_.ToString().Substring(0,2) } | gu