Arrays PowerShell在CSV中查找重复项并输出不同的标头

Arrays PowerShell在CSV中查找重复项并输出不同的标头,arrays,csv,powershell,Arrays,Csv,Powershell,我想问题就在标题里 我有一个CSV,看起来像 user,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 这给了我原始路径中的副本。我可以

我想问题就在标题里

我有一个CSV,看起来像

user,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
这给了我原始路径中的副本。我可以看到所有必需的信息,但如果我知道如何获取这些信息或将其格式化为有用的内容,我会感到很不安

我在谷歌上搜索了一下,发现了以下脚本:

$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
我不愿意使用它,因为首先我不知道它在做什么。这对我来说并没有什么意义,我不喜欢使用那个些我无法理解的脚本。 还有,这是更重要的部分,它只给了我一个副本,没有给我两个副本。我在寻找两个有问题的行,所以我可以找到具有相同文件的两个用户

如果有人能帮忙,我将不胜感激。
谢谢

这取决于您所需的输出格式,但要基于您已有的格式,我们可以使用它在控制台中显示记录:

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

您需要什么输出?原始csv行中是否有重复项?基本上就是全部内容。因此,如果在原始路径中发现重复项,我需要User、Path、Original\u Path,但我需要这两个发现的输出。因此,如果我的csv看起来像这样:user、path、original\u path user1、\\compa\c$\program files\test.doc、\\server1\files\test1.doc user2、\\compb\c$\program files\test.doc、\\server1\files\test1.doc,我需要了解user1和user2,而不仅仅是user2,这是我目前所了解的。谢谢,我很惊讶没有一个选项像unix的“uniq-d”那样打印副本。我还尝试了“sort-upropertyname”,然后对原始数组进行了diff,但效果并不理想。