Powershell - 删除所有重复的条目

Powershell - Removing all duplicate entries

我试图找到一个 Powershell 命令行,它将在文本文件中读取,删除所有重复行 (2+) 并保留重复行的 none。我无法在 Whosebug 或其他任何地方找到我的问题的答案。到目前为止,我发现的每个示例都只显示删除一个 and/or 许多重复行并保留一个。

这可以通过 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

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

为简洁起见,这些命令使用 built-in 别名 ?(代表 Where-Object)和 %(代表 ForEach-Object)。

Select-Object -UniqueGet-Unique 似乎都不允许将输出限制为输入中的单例(标准 Unix 实用程序 uniq 内置了这样的功能:uniq -u),所以需要一种不同的方法。

上述基于Group-Object的解决方案可能效率不高,但很方便:

  • 行按相同的内容分组,生成代表每个组的对象。

  • ? { $_.Count -eq 1 } 将组过滤到只有 1 个成员的组,实际上清除了所有重复的行。

  • Select-Object -ExpandProperty Name 然后将过滤后的组对象转换回它们所代表的输入行。