我有两个.CSV文件,其中包含有关我工作的员工的信息。第一个文件(ActiveEmploye.csv)有大约70个不同的字段,有2500个条目。另一个(EmployeEmail.csv)有四个字段(FirstName,LastName,Email,FullName)和700个条目。这两个文件都有FullName字段,这是我可以用来比较每个文件的唯一方法。我需要做的是将电子邮件地址(从EmployeEmail.csv)添加到ActiveEmploye.csv中的相应员工。而且,对于那些没有电子邮件地址的人,该字段可以留空。
我尝试使用几天前在互联网上找到的Join-Object函数,但是第一个csv文件包含了太多函数可以处理的字段。
非常感谢任何建议!
答案 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的数组索引,然后获取该元素上的命名成员的值。