合并 csv - 不加入

Merge csv's - no join

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

有些列确实具有相同的名称。有些人没有。如果它们具有相同的名称,则不应创建新列。有没有一种方法可以做到这一点而不必手动将所有列列为属性?

示例(只有 2 个文件)

文件 1:

Name Address 
Bob  123 Main

文件 2:

Name City
Bob  LA
Tom  Boston

结果

Name  Address City
Bob   123 Main
Bob           LA
Tom           Boston

归根结底,这可能无法正确排序。这里的技巧是读取每个文件的 header 并将其收集为字符串数组并删除重复项。

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

$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