Powershell难题:如何与CSV进行比较并从中提取匹配数据?

时间:2018-03-16 17:51:22

标签: powershell csv compare

我有一个带有名称列表的CSV文件,其名称为"名称"柱。在第二个CSV中,我有一个"名称"中的名字列表。列,以及" employeeid"中的员工ID列。

我想要的输出是:取名字"" CSV1中的列,将其与" name"进行比较CSV2中的列,只要匹配,请从" name"中取名。 CSV1 的列和 CSV2中匹配的员工ID,并使用"名称"创建新的CSV3。列和相应的" employeeid"列。

这是image describing my question

我已经开始使用import-csv将每个CSV作为变量拉出来,并且还使用带有select头的管道进行修补,但我不理解在两者之间进行用户名列匹配所需的逻辑CSV1和CSV2然后将其与CSV2中的employeeID组合。

提前感谢您提供的任何指导。

布赖恩

- 更新3/19

$csv1 = import-csv -Path "C:\csv1.csv" | select-object -ExpandProperty 'accountname' | Sort-Object | where {$_ -ne ""}
$csv2 = import-csv -Path "C:\csv2.csv" | select 'accountname','employeeid'

$accountNamesFromCSV2 = $csv2 | select-object -ExpandProperty accountname 
$compareTheTWo = Compare-Object -ReferenceObject $csv1 -DifferenceObject $accountNamesFromCSV2 -ExcludeDifferent -IncludeEqual -passThru

1 个答案:

答案 0 :(得分:0)

星期五,所以我会很好。要在提示符下执行此操作:

$csv2 = import-csv .\bar.csv; Import-CSV .\foo.csv | %{$name1 = $_.name;$id = ($csv2 | ?{$_.Name -eq $name1}).EmployeeID; Add-Member -InputObject $_ -MemberType NoteProperty -Name EmployeeID -Value $id; $_} | select Name, EmployeeID | Export-CSV .\result.csv

或者,脚本中的人性化版本更多:

$csv2 = Import-CSV .\bar.csv
$result = New-Object System.Collection.ArrayList
foreach($user in (Import-CSV .\foo.csv)){
    $id = ($csv2 | Where-Object{$_.Name -eq $user.Name).EmplyeeID
    Add-Member -InputObject $user -MemberType NoteProperty -Name EmployeeID -Value $id
    $result.Add($user) | Out-Null
}
$result | Export-CSV .\result.csv -NoTypeInformation