2015-04-12 55 views
1

重复我有以下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为null。

我试着使用:

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

但是如果我要删除的重复数据删除技术是首先列出它才会起作用。想知道我错过了什么(新手程序员):)

谢谢!

+0

我觉得可能有更多的条件来考虑,你不要在您的测试数据有。所以第一行需要被删除,因为它已经有了一个匹配的'路径'或'路径'和'目标'。如果有重复,我们只保留一个副本?如果有两个以上的重复项呢?哪一个流行或者只有两个? – Matt

回答

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-objectSort-Object isCopied -Desc | Select-Object -First 1

+0

谢谢!我会试试这个。 – user1442336