使用PowerShell合并3个CSV文件

时间:2015-03-20 03:48:19

标签: powershell csv

  • 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

1 个答案:

答案 0 :(得分:0)

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

$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中查找匹配记录,并将该记录的相对属性扩展为新属性的值。它使用-PassThru开关作为最后一个Add-Member,以便它为每条记录输出一次记录,并且这些记录都在$ Merged数组中收集。然后我将$ Merged输出到一个新的CSV文件中。