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 -Unique
和 Get-Unique
似乎都不允许将输出限制为输入中的单例(标准 Unix 实用程序 uniq
内置了这样的功能:uniq -u
),所以需要一种不同的方法。
上述基于Group-Object
的解决方案可能效率不高,但很方便:
行按相同的内容分组,生成代表每个组的对象。
? { $_.Count -eq 1 }
将组过滤到只有 1 个成员的组,实际上清除了所有重复的行。
Select-Object -ExpandProperty Name
然后将过滤后的组对象转换回它们所代表的输入行。
我试图找到一个 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 -Unique
和 Get-Unique
似乎都不允许将输出限制为输入中的单例(标准 Unix 实用程序 uniq
内置了这样的功能:uniq -u
),所以需要一种不同的方法。
上述基于Group-Object
的解决方案可能效率不高,但很方便:
行按相同的内容分组,生成代表每个组的对象。
? { $_.Count -eq 1 }
将组过滤到只有 1 个成员的组,实际上清除了所有重复的行。Select-Object -ExpandProperty Name
然后将过滤后的组对象转换回它们所代表的输入行。