Powershell 如何将CSV文件与唯一的标题组合起来,并在每行显示每个CSV的输出?

Powershell 如何将CSV文件与唯一的标题组合起来,并在每行显示每个CSV的输出?,powershell,csv,Powershell,Csv,我已经看到了许多如何组合CSV文件的例子,但没有一个完全符合我的目标。我有多个CSV文件,只包含一行,但包含多个列。每个CSV中的每个标题可能不同,但它们之间有一个共同的列名。我想要完成的输出是将每个CSV文件中的所有标题(无论显示的值是否为null)添加到输出CSV文件的第1行。然后,我想将每个CSV的单行输出与输出CSV文件中的一行对齐,并相应地填充每一列,并将没有指定值的列保留为空 CSV1: Name,Date,Year,Country Bill,May 2018,1962,Canada

我已经看到了许多如何组合CSV文件的例子,但没有一个完全符合我的目标。我有多个CSV文件,只包含一行,但包含多个列。每个CSV中的每个标题可能不同,但它们之间有一个共同的列名。我想要完成的输出是将每个CSV文件中的所有标题(无论显示的值是否为null)添加到输出CSV文件的第1行。然后,我想将每个CSV的单行输出与输出CSV文件中的一行对齐,并相应地填充每一列,并将没有指定值的列保留为空

CSV1:

Name,Date,Year,Country Bill,May 2018,1962,Canada 姓名、日期、年份、国家 法案,1982年5月20日,加拿大 CSV2:

Profile,Prov,Size,Name 1,ON,14,Steve Name,Profile,Size,Date,Year,Prov,Country Bill,,,May 2018,1962,,Canada Steve,1,14,,,ON,, 外形、规格、尺寸、名称 1月14日,史蒂夫 CSV最终版:

Profile,Prov,Size,Name 1,ON,14,Steve Name,Profile,Size,Date,Year,Prov,Country Bill,,,May 2018,1962,,Canada Steve,1,14,,,ON,, 名称、概况、尺寸、日期、年份、省、国家 1962年5月20日,加拿大 史蒂夫,1,14,在,,
虽然还有另一个选项可以在带有
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

导入、提取、构造和导出

$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 |导出csv-路径$outputcsv-NoTypeInformation

查找几个模仿sql联接的
联接对象
cmdlet中的一个。使用以下命令:
$Csv1 | FullJoin$Csv2 Name
联接对象
不是内置cmdlet。添加了安装cmdlet的步骤。