如何将CSV文件与唯一的标头合并在一起,并显示每行CSV的输出?

时间:2018-12-08 15:36:09

标签: powershell csv

我已经看到了许多有关如何合并CSV文件的示例,但没有一个完全适合我要完成的工作。我有多个CSV文件,它们仅包含1行,但包含多列。每个CSV文件中的每个标头可能都不同,但是它们之间确实有相同的列名。我要完成的输出是将每个CSV文件中的所有标头(无论显示的值是否为null)添加到我的输出CSV文件的第1行。然后,我想将每个CSV的单行输出与输出CSV文件中的一行对齐,并相应地填充每列,并将那些未分配值的行留空。

CSV1:

Name,Date,Year,Country
Bill,May 2018,1962,Canada

CSV2:

Profile,Prov,Size,Name
1,ON,14,Steve

CSV最终版本:

Name,Profile,Size,Date,Year,Prov,Country
Bill,,,May 2018,1962,,Canada
Steve,1,14,,,ON,,

2 个答案:

答案 0 :(得分:0)

虽然还有另一种选择是使用Join-Object在同一行中执行此操作, 您可以从PSGallery获取此cmdlet。

Find-Script join-object | Install-Script -Verbose -Scope CurrentUser

在下面工作,

(Join-Object -Left $CSV1 -Right $CSv2 -LeftJoinProperty Name -RightJoinProperty Name ), (Join-Object -Left $CSV2 -Right $CSV1 -LeftJoinProperty Name -RightJoinProperty Name -Type AllInLeft) | Export-Csv -Path c:\CombinedCsv.csv -NoTypeInformation

答案 1 :(得分:0)

导入,提取,构建和导出...

$files = 'csv1.csv','csv2.csv'
$outputcsv = 'final.csv'

# import all files
$csv = $files | Import-Csv 

# extract columns from all files
$columns = $csv | ForEach {
    $_ | Get-Member -MemberType NoteProperty | Select -ExpandProperty Name
}

# construct an object (from file 1) with all the columns
# this will build the initial csv
# (SilentlyContinue on members that already exist)

$columns | ForEach {
    Add-Member -InputObject $csv[0] -Name $_ -MemberType NoteProperty -Value '' -ErrorAction SilentlyContinue
}

# export first object - and build all columns
$csv | Select -First 1 | Export-Csv -Path $outputcsv -NoTypeInformation

# export the rest
# -force is needed, because only 1st object has all the columns
$csv | Select -Skip 1 | Export-Csv -Path $outputcsv -NoTypeInformation -Force -Append

# show files
($files+$outputcsv) | ForEach { "$_`:"; (Get-Content -LiteralPath $_); '---' }

编辑:无需考虑出口问题。一行就足够了:     $ csv | Export-Csv -Path $ outputcsv -NoTypeInformation