以下のサンプルと同様の情報を含む列を含む入力CSVファイルがあります。
805265
995874
805674
984654
332574
339852
先頭の2文字に基づいて配列に一意の値を抽出したいので、上記のサンプルを使用すると、結果は次のようになります。
80、99、98、33
PowerShellを使用してこれをどのように実現できますか?
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}
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 -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
最初の2文字を含む項目で新しい配列を作成し、次に Select-Object
は、次のようなユニークなアイテムを提供します。
$newArray = @()
$csv = Import-Csv -Path C:\your.csv
$csv | % {
$newArray += $_.YourColumn.Substring(0, 2)
}
$newArray | Select-Object -Unique