web-dev-qa-db-ja.com

PowerShell-一意の値のフィルタリング

以下のサンプルと同様の情報を含む列を含む入力CSVファイルがあります。

805265
995874
805674
984654
332574
339852

先頭の2文字に基づいて配列に一意の値を抽出したいので、上記のサンプルを使用すると、結果は次のようになります。

80、99、98、33

PowerShellを使用してこれをどのように実現できますか?

22
Temple

Group-Object コマンドレット(エイリアスgroup)このため:

 Import-Csv foo.csv |グループ{$ _。ColumnName.Substring(0、2)} 
 
 Count Name Group 
 ----- ---- ----- 
 2 80 {805265、805674} 
 1 99 {995874} 
 1 98 {984654} 
 2 33 {332574、339852} 
16
Keith Hill

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
23
stej

あなたはハッシュテーブルを使うかもしれません:

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

$ht = @{}

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

$ht.keys

99
98
33
80
1
mjolinor

Select-Object -uniqueを使用する代わりのもう1つのオプションは、 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
0
pholpar

最初の2文字を含む項目で新しい配列を作成し、次に Select-Object は、次のようなユニークなアイテムを提供します。

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