3

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

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

任何建议都非常感谢!

4

2 回答 2

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
于 2013-01-28T16:36:43.570 回答
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 的数组索引,然后获取该元素上命名成员的值。

于 2013-07-23T17:19:26.360 回答