【问题标题】:How to merge two csv files with PowerShell如何使用 PowerShell 合并两个 csv 文件
【发布时间】:2013-01-11 23:05:00
【问题描述】:

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

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

非常感谢任何建议!

【问题讨论】:

    标签: powershell csv powershell-3.0


    【解决方案1】:

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

    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
    

    【讨论】:

    • 出于一个奇怪的原因,Joined.csv 添加了“电子邮件”字段,就像您的代码应该做的那样,但是对于每个员工来说它都是空白的。
    • 嗯,弹出的第一件事:你确定 csv 中的字段是“全名”而不是类似的东西 - 例如有尾随空格...?我用一些测试代码尝试了它,它对我有用,但是 csv 字段中的尾随空格让我陷入了很多次......因此我的第一个猜测。电子邮件字段相同。
    • 你是对的,尾随空格是罪魁祸首!现在我必须找到一个仅在每个字段末尾删除空格的正则表达式,而不是 .CSV 文件中的每个空格。谢谢你的帮助
    • 您也可以在 Import-Csv 上强制 -Header 并选择 -skip 1 忽略 actual 标题:Import-Csv -Header FullName, email EmployeeEmail.csv | select -skip 1 | foreach...
    • 如果你将对象传递给数组,你可以加入更多的项目,而不仅仅是电子邮件。例如,使用$Employees.Add($_.FullName,$_),您可以使用-Value $Employess."$($_.FullName)"."email" 调用Add-Member
    【解决方案2】:

    这是@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 的数组索引,然后获取该元素上命名成员的值。

    【讨论】:

      猜你喜欢
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      • 2015-09-27
      • 2013-04-22
      • 2020-11-22
      • 2015-05-23
      相关资源
      最近更新 更多