2

私はこの PS スクリプトを書こうとしていますが、誰かが私を打ち負かした場合、彼らは無料のカルマを手に入れると確信しています。

とにかく、これは私がこのようなファイル設定を取りたいものです

foo.bar=Some random text is stored here
foo.bar=Lazy maintainers make me angry
bar.foo=Hello World!
bar.foo=Hello World!

主な目標は、私がいくつか持っている重複したエントリを削除することです。. . これは十分に簡単に思えます

Get-Content c:\list.txt | Select-Object -Unique 

ただし、同じキー識別子を持つ競合を別のファイルに保存して、どれを保持する必要があるかを確認したいと考えています。

私はまだPSの初心者であり、これを行う良い方法をまだ見つけていません.

4

1 に答える 1

3

Group-Object同じキーを持つアイテムをグループ化するために使用できます。次に、複数の要素が含まれているグループを探します(重複したエントリを示します)。最後に、それらをどこかのファイルに出力します。

# raw content
$lines = Get-Content C:\data.txt

# package each line into a little object with properties Key and Val
$data = $lines |%{ $key,$val = $_.Split('='); new-object psobject -prop @{Key = $key; Val = $val} }

# group the objects by key, only keep groups with more than 1 element
$duplicates = $data | group Key |?{$_.Count -gt 1}

# print out each key and the different values it has been given
$duplicates |%{ "--- [$($_.Name)] ---"; $_.Group | select -expand Val }

結果:

--- [foo.bar] ---
Some random text is stored here
Lazy maintainers make me angry
--- [bar.foo] ---
Hello World!
Hello World!

Out-Fileログに保存したい場合は、それをパイプで送ることができます。

于 2012-08-30T15:51:40.507 に答える