Powershell - 删除所有重复的条目

时间:2017-01-24 16:54:40

标签: powershell-v2.0

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

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

1 个答案:

答案 0 :(得分: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)和%(适用于ForEach-Object)。

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

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

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

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

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