2017-01-24 18 views
1

私は、テキストファイルを読み込むPowershellコマンドラインを見つけようとしています。すべての重複した行(2+)を削除し、私はどこでもどこでもStackoverflow上の私の質問の答えを見つけることができませんでした。私が今までに見つけたすべての例は、複製された行の1つおよび/または多くを削除して保持することを示しています。Powershell - すべての重複したエントリを削除する

Powershell 2.0でこれが可能ですか?

PowerShellのコマンド例:

Get-Content "C:\Temp\OriginalFile.txt" | select -unique| Out-File "C:\Temp\ResultFile.txt" 

OriginalFile.txt

1 
1 
1 
2 
2 
3 
4 

ResultFile.txt(実際の)

1 
2 
3 
4 

ResultsFile.txt(希望)

3 
4 

答えて

0

PSV2:

$f = 'C:\Temp\OriginalFile.txt' 

Get-Content $f | Group-Object | ? { $_.Count -eq 1 } | Select-Object -ExpandProperty Name 

PSV3 +クリーナー、より簡潔なソリューションを可能にする:簡潔にするため

Get-Content $f | Group-Object | ? Count -eq 1 | % Name 

、コマンドが構築され使用します - 別名?Where-Objectの場合)および%(の場合))。従って、異なるアプローチが必要とされる、:

いずれSelect-Object -UniqueGet-Uniqueは一見(uniq -u標準のUNIXユーティリティuniqを内蔵このような特徴を有している)入力にシングルトンへの出力を制限することを可能にします。

上記Group-Objectベースのソリューションは、効率的ではないかもしれないが、それは便利である:

  • 線が各グループを表すオブジェクトを得、同一の内容によってグループ化されます。

  • ? { $_.Count -eq 1 }フィルタは、メンバーが1人のメンバーにフィルタをかけ、実際にはすべての重複した行を削除します。

  • Select-Object -ExpandProperty Nameは、フィルターされたグループオブジェクトを、それらが表す入力行に変換します。

+0

ありがとうございます。私はあなたの応答のためにこれを働かせました。 –

+0

'Select-Object -Expand Name'を' Select-Object -ExpandProperty Name'に変更しなければなりませんでした。 –

+0

@packetloss:良い点:完全なパラメータ名は '-ExpandProperty'です。スクリプトでは完全なパラメータ( '-Expand'もうまくいったが) - 答えが更新された。 – mklement0

関連する問題