2017-10-17 8 views
-2

から類似した行を削除tbl.txt150万行)は、のように構築された:PowerShellは:ファイルを考えてみましょファイル

 
    63 ; 193 ; 'Green' ; 'Color' 
152 ; 162 ; 'Tall' ; 'Size' 
230 ; 164 ; '130lbs' ; 'Weight' 
249 ; 175 ; 'Green' ; 'Color'  *duplicate on 'Value' and 'Attribute'* 
420 ; 178 ; '8'  ; 'Shoesize' 
438 ; 172 ; 'Tall' ; 'Size'  *duplicate on 'Value' and 'Attribute'* 

がどのように私はkeeptことができます。

Num1 ; Num2 ; 'Value' ; 'Attribute'

だからtbl.txtは次のようになります最初のユニークな行は'Value''Attribute' であり、その後はの重複する行を削除しますと'Attribute'?すべてのヘルプははるかに高く評価されて

 
    63 ; 193 ; 'Green' ; 'Color' 
152 ; 162 ; 'Tall' ; 'Size' 
230 ; 164 ; '130lbs' ; 'Weight' 
420 ; 178 ; '8'  ; 'Shoesize' 

結果は次のようになります。

+3

何をあなたは試してみましたが、どのようにあなたが試したものを失敗したのか?理想的には、試したことの[MCVE]を提供し、失敗の仕方やエラーメッセージ、誤った出力などの特定の情報を含める必要があります。 SOはコード作成サービスではありません。最善の質問は、有益な情報を提供するものであり、回答者が自分の正解を工夫するためのガイドとなり得ることです。 [Ask]を参照してください。 –

+0

上記の検索ボックスを使用して、ユニークな値に関する既存の質問のいくつかを見てみましょう。このような:[Powershell - ユニークな値のフィルタリング](// stackoverflow.com/q/9825060) –

+0

最初は私は 'cat tbl.txt |それに応じてGet-Uniqueを選択したが、解決策が見つからなかった。 @James Foreach-Object {$ _。Substring(0,2)}をどのように回すことができるのかまだわかりません。 Select-Object -unique'は、行の長さが異なるため、適切な解決策になります。 – SamNorton

答えて

0

Get-Contentでテキストファイルをループし、文字列操作で列'Value' ; 'Attribute'を分離し、ハッシュマップを使用して、すでに類似の行を処理しているかどうかを確認します。また

$map = @{}; 
Get-Content tbl.txt | ` 
      %{ $key = $_.Substring($_.IndexOf(';',$_.IndexOf(';')+1)+1); ` 
       If(-not $map.ContainsKey($key)) { $_; $map[$key] = 1 } ` 
       } 

、コメントで述べたように、あなたがgroupを使用し、クリテリウムをグループ化するのと同じ部分文字列を適用し、最終的には各グループの最初の要素を取ることができます:コードで

ことを想定し
Get-Content tbl.txt | group {$_.Substring($_.IndexOf(';',$_.IndexOf(';')+1)+1)} ` 
        | %{$_.Group[0]} 
1

あなたのデータはヘッダーなしです:

Import-CSV "C:\folder\data.txt" –Delimiter ";" -Header Num1,Num2,Value,Attribute | Sort-Object -Property Value -Unique 

はあなたの所望の出力を提供します

Num1 Num2 Value  Attribute 
---- ---- -----  --------- 
230 164 '130lbs' 'Weight' 
420 178 '8'  'Shoesize' 
63 193 'Green' 'Color' 
152 162 'Tall' 'Size' 

あなたの結果をエクスポートするエクスポート-CSVを使用することができます。

Import-CSV "C:\folder\data.txt" –Delimiter ";" -Header Num1,Num2,Value,Attribute | Sort-Object -Property Value -Unique | Export-CSV "C:\folder\data2.txt" –Delimiter ";" -NoTypeInformation 
関連する問題