根据现有列删除重复项

时间:2015-04-12 19:25:38

标签: powershell powershell-v2.0 powershell-v3.0

我有以下CSV文件:

"Path","destination","isCopied"
"E:\DCMCache\file1","V:\dcmcache"
"E:\DCMCache\file2","V:\dcmcache","1"
"E:\DCMCache\file1","V:\dcmcache","1"
"E:\DCMCache\file3","V:\dcmcache","1"
"E:\DCMCache\file4","V:\dcmcache","1"

我需要删除重复项,但前提是isCopied为空。

我试图使用:

Import-CSV $InputFile | Group-Object Path | foreach-object { $_.group | sort-object Path | select -last 1 } |Export-Csv $InputFile-completed.csv -NoTypeInformation -Append

但是只有先删除我要删除的骗局才有效。想知道我失踪了什么(新手程序员在这里):)

谢谢!

1 个答案:

答案 0 :(得分:2)

所以到目前为止我们已经有了这个。

Import-Csv $InputFile | Group-Object Path | ForEach-Object{
    If($_.Count -gt 1){
        $_.Group | Where-Object{$_.isCopied}
    } Else {
        $_.Group
    }
} | Export-Csv $InputFile-completed.csv -NoTypeInformation -Append

采用分组逻辑,然后检查每个count。如果计数大于1,我们只允许具有isCopied值的条目。因此,您应该能够轻松地将其输出到文件中。

如果此逻辑出现问题,您可能需要包含更多条件的更好的源文件。目前,这满足了基本要求。

如果您需要更具体地使用重复的where子句,您可以在其中进行更改。

如果有两个以上的副本,您始终可以使用where-object

添加到Sort-Object isCopied -Desc | Select-Object -First 1