如何使用PowerShell合并两个csv文件

时间:2013-01-28 15:08:04

标签: powershell csv powershell-v3.0

我有两个.CSV文件,其中包含有关我工作的员工的信息。第一个文件(ActiveEmploye.csv)有大约70个不同的字段,有2500个条目。另一个(EmployeEmail.csv)有四个字段(FirstName,LastName,Email,FullName)和700个条目。这两个文件都有FullName字段,这是我可以用来比较每个文件的唯一方法。我需要做的是将电子邮件地址(从EmployeEmail.csv)添加到ActiveEmploye.csv中的相应员工。而且,对于那些没有电子邮件地址的人,该字段可以留空。

我尝试使用几天前在互联网上找到的Join-Object函数,但是第一个csv文件包含了太多函数可以处理的字段。

非常感谢任何建议!

2 个答案:

答案 0 :(得分:4)

可能有几种方法可以给这只猫做皮。我会尝试这个:

Import-Csv EmployeeEmail.csv | ForEach-Object -Begin {
    $Employees = @{}
} -Process {
    $Employees.Add($_.FullName,$_.email)
}

Import-Csv ActiveEmployees.csv | ForEach-Object {
    $_ | Add-Member -MemberType NoteProperty -Name email -Value $Employees."$($_.FullName)" -PassThru
} | Export-Csv -NoTypeInformation Joined.csv

答案 1 :(得分:0)

这是@BartekB的另一种方法,我用它来连接左边的多个字段,并且处理时间更好。

Import-Csv EmployeeEmail.csv | ForEach-Object -Begin {
    $Employees = @{}
} -Process {
    $Employees.Add($_.FullName,$_)
}

Import-Csv ActiveEmployees.csv |
    Select *,@{Name="email";Expression={$Employees."$($_.FullName)"."email"}} |
        Export-Csv Joined.csv -NoTypeInformation

这允许在$ Employees上查询FullName的数组索引,然后获取该元素上的命名成员的值。