【问题标题】:Merging 3 CSV files using powershell [duplicate]使用powershell合并3个CSV文件[重复]
【发布时间】:2015-05-23 10:09:01
【问题描述】:
  • CSV1 字段:EmplID,identity,Name,PreferredName,Location,Department
  • CSV2 字段:identity,EmplID,first_name,last_name,email
  • CSV3 字段:Emplid,Extension

我想通过比较所有文件共有的EmpID 的值来合并所有这 3 个 CSV,并生成一个包含以下所有字段的新 CSV..

EmplID,identity,Name,PreferredName,Location,Department,first_name,last_name,email,Extension

【问题讨论】:

  • 感谢马特的建议,很抱歉我之前没有正确提及我的要求。输出应包含 CSV1 的全部数据,如果从 CSV2 和 CSV3 中找到匹配项,则应添加到相应的专栏..我该怎么做..如果可能的话,也请解释一下步骤..

标签: powershell csv


【解决方案1】:

已经很晚了,我很无聊,所以让我们这样做......

$CSV1 = Import-CSV C:\Path\To\File1.csv
$CSV2 = Import-CSV C:\Path\To\File2.csv
$CSV3 = Import-CSV C:\Path\To\File3.csv

$Merged = ForEach($Record in $CSV1){
    Add-Member -InputObject $Record -NotePropertyName 'first_name' -NotePropertyValue ($CSV2|Where{$_.EmplID -eq $Record.EmplID}|Select -Expand first_name)
    Add-Member -InputObject $Record -NotePropertyName 'last_name' -NotePropertyValue ($CSV2|Where{$_.EmplID -eq $Record.EmplID}|Select -Expand last_name)
    Add-Member -InputObject $Record -NotePropertyName 'email' -NotePropertyValue ($CSV2|Where{$_.EmplID -eq $Record.EmplID}|Select -Expand email)
    Add-Member -InputObject $Record -NotePropertyName 'Extension' -NotePropertyValue ($CSV3|Where{$_.EmplID -eq $Record.EmplID}|Select -Expand Extension) -PassThru
}
$Merged | Export-CSV C:\Path\To\New.CSV -NoTypeInfo

这会将每个 CSV 文件加载到一个变量中,然后循环遍历 CSV1,并为其中的每条记录添加 4 个属性。对于每个属性,它会尝试根据 EmplID 作为索引在 CSV2 或 CSV3 中找到匹配的记录,并将该记录中的相关属性扩展为新属性的值。它对最后一个 Add-Member 使用 -PassThru 开关,以便为每条记录输出一次记录,并且全部收集在 $Merged 数组中。然后我将 $Merged 输出到一个新的 CSV 文件中。

【讨论】:

  • 感谢 TheMadTechnician,您的脚本运行良好,但搜索需要很长时间才能完成.. 5000 行需要将近 20-25 分钟...:(
猜你喜欢
  • 2017-12-19
  • 2015-06-19
  • 2017-11-01
  • 2021-12-06
  • 2018-04-18
  • 2013-01-11
  • 2020-09-15
  • 2015-03-09
  • 2020-09-23
相关资源
最近更新 更多