我有以下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
但是只有先删除我要删除的骗局才有效。想知道我失踪了什么(新手程序员在这里):)
谢谢!
答案 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