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