2015-04-12 91 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