合并csv - 没有加入

时间:2015-10-07 18:52:57

标签: powershell csv export-to-csv

我需要结合大量的Excel电子表格。我使用PowerSHell将它们转换为CSV,现在需要合并它们,但不像通常那样合并。合并不使用连接。如果我有3个文件,每个文件有100行,我的新文件应该有300行。因此,如果UNION而不是JOIN使用数据库术语,则更多。

有些列的名称相同。有些人没有。如果它们具有相同的名称,则不应创建新列。有没有办法做到这一点,而无需手动将所有列列为属性?

示例(仅包含2个文件)

File1中:

Name Address 
Bob  123 Main

文件2:

Name City
Bob  LA
Tom  Boston

结果

Name  Address City
Bob   123 Main
Bob           LA
Tom           Boston

1 个答案:

答案 0 :(得分:0)

在一天结束时,这可能无法正确排序。这里的技巧是读取每个文件的标题并将其作为字符串数组收集并删除重复项。

此代码假定所有文件都在同一位置。如果不是,您将需要考虑到这一点。

$files = Get-ChildItem -Path 'C:\temp\csv\' -Filter '*.csv' | Select-Object -ExpandProperty FullName

# Gather the headers for all the files. 
$headers = $files | ForEach-Object{
    (Get-Content $_ -Head 1).Split(",") | ForEach-Object{$_.Trim()}
} | Sort-Object -Unique

# Loop again now and read in the csv files as objects
$files | ForEach-Object{
    Import-Csv $_
} | Select-Object $headers 

输出如下:

Address  City   Name
-------  ----   ----
123 Main        Bob 
         LA     Bob 
         Boston Tom