我有一个列表,其中重复了几个项目。我需要识别这些项目,并创建一个新列表以包括所有重复的项目,但是每次它们再次出现时。
以下是列表:
apple
orange
pear
carrot
tomato
cucumber
apple
apple
apple
cucumber
tomato
那是苹果x4,番茄x2,黄瓜x2和其余x1。
所需的新列表为:
apple
apple
apple
apple
tomato
tomato
cucumber
cucumber
这会删除仅存在一次的对象,并列出每次存在的不止一次的对象。
我尝试过:
$Fruits = Get-Content -Path C:\temp\Fruits.txt
$Unique = $Fruits | Select-Object -Unique
$MoreThanOne = Compare-Object –referenceobject $Unique –differenceobject $Fruits | Select-Object -ExpandProperty inputobject
$MoreThanOne
这将产生:
apple
apple
apple
cucumber
tomato
每种水果缺少一个。
有什么想法吗?
答案 0 :(得分:8)
通过比较两个对象并保存差异,您基本上可以执行($Unique - "each entry once")
。这是因为您想要保留所有条目的变量与保留每个条目一次的变量之间的区别。
对此提供了更好的解决方案Group-Object
。这样会将所有条目分组在一起,以便您可以查找包含多个条目的条目。
命令Get-Content -Path C:\temp\Fruits.txt | Group-Object
输出以下内容:
Count Name Group
----- ---- -----
4 apple {apple, apple, apple, apple}
2 tomato {tomato, tomato}
2 cucumber {cucumber, cucumber}
1 carrot {carrot}
1 pear {pear}
1 orange {orange}
如果您现在过滤正确:
Get-Content -Path C:\temp\Fruits.txt | Group-Object | Where-Object {$_.Count -gt 1} | Select-Object -ExpandProperty Group
输出是这样的:
apple
apple
apple
apple
tomato
tomato
cucumber
cucumber