2016-01-21 22 views
1

我想問題在標題中。PowerShell在CSV中查找重複項並輸出不同的標題

我有一個CSV,看起來像

user,path,original_path 

我試圖找到原來的路徑,然後輸出的用戶和original_path行上重複。

這是我到目前爲止。

$2 = Import-Csv 'Total 20_01_16.csv' | Group-Object -Property Original_path | 
Where-Object { $_.count -ge 2 } | fl Group | out-string -width 500 

這給了我在Original_Path中的重複項。我可以看到所有必需的信息,但如果我知道如何獲得或將其格式化爲有用的東西,我就會變得很危險。

我做了一點Googleing,發現此腳本:

$ROWS = Import-CSV -Path 'Total 20_01_16.csv' 
$NAMES = @{} 
$OUTPUT = foreach ($ROW in $ROWS) { 
IF ($NAMES.ContainsKey($ROW.Original_path) -and $NAMES[$ROW.original_path] -lt 2) 
{ $ROW } 
$NAMES[$ROW.original_path] += 1 } 

Write-Output $OUTPUT 

我不願意,因爲,第一我不知道它在做什麼用呢。所以對我來說很少有任何意義,我不喜歡使用腳本,我無法擺脫困境。 此外,這是更重要的部分,它只給我一個單一的副本,它不給我兩套。我在兩條違規行後,所以我可以找到兩個用戶具有相同的文件。

如果任何人都可以如此善待伸出援手,我會很感激。 感謝

+0

你需要輸出什麼?原始csv行的重複? –

+0

幾乎整個事情。 因此,如果在Original_Path中找到重複項,我想要User,Path,Original_Path 但是我需要兩個發現的輸出。 所以,如果我的CSV看起來是這樣的: 用戶,路徑,original_path USER1,\\ COMPA \ C $ \ Program Files文件\ Test.doc的,\\ server1的\ FILES \ test1.doc 用戶2 \\ COMPB \ c $ \ program files \ test.doc,\\ server1 \ files \ test1.doc 我需要了解user1和user2,而不僅僅是user2,這是我目前所掌握的。 謝謝 –

回答

3

這取決於你所需要的輸出格式,而是要建立在你已經擁有的,我們可以用它來顯示在控制檯中的記錄:

Import-Csv 'Total 20_01_16.csv' | 
Group-Object -Property Original_path | 
Where-Object { $_.count -ge 2 } | 
Foreach-Object { $_.Group } | 
Format-Table User, Path, Original_path -AutoSize 

另外,使用此將它們保存在一個新的csv文件:

Import-Csv 'Total 20_01_16.csv' | 
Group-Object -Property Original_path | 
Where-Object { $_.count -ge 2 } | 
Foreach-Object { $_.Group } | 
Select User, Path, Original_path | 
Export-csv -Path output.csv -NoTypeInformation 
+1

太棒了。並用一個命令。非常感謝!! –

+0

我很驚訝沒有像unix的「uniq -d」這樣的打印出重複項的選項。我也嘗試過「sort -u propertyname」,然後對原始數組進行差異化處理,但效果不佳。 – js2010