根据现有列删除重复项

remove duplicates based on existing column

我有以下 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

但它只有在我要删除的骗局列在第一位时才有效。想知道我错过了什么(这里是新手程序员):)

谢谢!

到目前为止我们已经完成了。

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