То, что вы предлагаете, не очень полезно или даже действительно CSV.ИМХО только два результата будут иметь смысл:
Это:
Server1,Info1,Server2,Info2
server1,item1,server2,item2
server1,item1,server2,item2
Или это:
Server,Info
server1,item1
server1,item1
server2,item2
server2,item2
Первый подход:
$csv1 = Import-Csv ".\Powershell test\A.csv"
$csv2 = Import-Csv ".\Powershell test\B.csv"
$merged = for($i = 0; $i -lt $csv1.Count; $i++) {
$new = new-object psobject
$entry1 = $csv1[$i]
$entry1 | Get-Member -Type NoteProperty | foreach {
Add-Member -InputObject $new -MemberType NoteProperty -Name ($_.Name + "1") -Value $entry1.($_.Name)
}
$entry2 = $csv2[$i]
$entry2 | Get-Member -Type NoteProperty | foreach {
Add-Member -InputObject $new -MemberType NoteProperty -Name ($_.Name + "2") -Value $entry2.($_.Name)
}
$new
}
$merged | Export-Csv ".\Powershell test\merged.csv"
Второйподход:
$csv1 = Import-Csv ".\Powershell test\A.csv"
$csv2 = Import-Csv ".\Powershell test\B.csv"
$merged = $csv1 + $csv2
$merged | Export-Csv ".\Powershell test\merged.csv"
ОБНОВЛЕНИЕ
Если вы хотите точно выводить данные (и файлы наверняка имеют одинаковые заголовки и количество строк), вы можете использовать уникальныеСначала заголовки, а затем просто переименуйте их позже:
$csv1 = Import-Csv ".\Powershell test\A.csv"
$csv2 = Import-Csv ".\Powershell test\B.csv"
$merged = for($i = 0; $i -lt $csv1.Count; $i++) {
$new = New-Object PSObject
("Server", "Info") | foreach {
Add-Member -InputObject $new -MemberType NoteProperty -Name ($_ + "1") -Value $csv1[$i].$_
Add-Member -InputObject $new -MemberType NoteProperty -Name ($_ + "2") -Value $csv2[$i].$_
}
$new
}
$header = $true
$merged | ConvertTo-Csv -NoTypeInformation | foreach {
if ($header) {
$header = $false
# remove the numbers from the headers
$_ -replace "\d", ""
}
else { $_ }
} | Out-File ".\Powershell test\merged.csv"
Пояснения:
Count
доступно в Powershell для всех коллекций и безопаснее, чем Length
который является свойством только массивов.Но в этом случае оба должны работать.
В цикле создается новый пустой объект (с New-Object
), а затем заполняется путем добавления членов проанализированных объектов CSV (с Add-Member
).Счетчик добавляется к именам свойств, чтобы сделать их уникальными.
Коллекция этих объектов ($merged
) затем конвертируется в CSV, числа в строке заголовка удаляются и все сохраняется в файл.