2012-03-22 5 views
17

をフィルタリング:私は先頭の2つの文字に基づいて、配列にユニークな値を抽出したいのPowershell - 私は次のサンプルのような情報を含む列を持つ入力CSVファイルたユニーク値の

805265 
995874 
805674 
984654 
332574 
339852 

を上記のサンプルを使用して、私の結果は次のようになります。

80、99、98、33

どのように私はこの使用してPowerShellを実現するのでしょうか?

答えて

12

私はこのために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} 
+0

私はPowerShellのにかなり新たなんだと、このコマンドレットについては知りませんでした。お返事ありがとうございます...私はこれを使用してかなりのステップをまとめることができます。ブリリアント! – Temple

20

使用Select-Objectとパラメータ-unique:intへの変換が必要な場合

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

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

、そしてちょうど[int]にキャスト:

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

は、あなたが最初の二つを含むアイテムを持つ新しい配列を作ることができます次にSelect-Itemを使用して、このようなユニークなアイテムを提供してください:

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

あなたはハッシュテーブルを使用する場合があります。

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

$ht = @{} 

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

$ht.keys 

99 
98 
33 
80 
関連する問題