PowerShell Import-Csv列的多个CSV串联

时间:2019-01-20 18:27:08

标签: powershell csv multiple-columns

我想将多个具有3列和100行的.csv文件导入到一个.csv文件中,每次导入都进入接下来的3列(ABC-DEF-GHI)中,而不是全部并入前3列中有数千行。

我尝试过Import-Csv,但是无法控制输出的放置位置。我将不得不使用COM对象(New-Object -ComObject excel.Application)还是有一种更清洁的方法来控制导入的单元格?

标题行是

PSComputerName,HotfixID,InstalledOn

但是我需要让每个循环都可以遍历而不是在下面。

PSComputerName,HotfixID,InstalledOn,PSComputerName,HotfixID,InstalledOn,PSComputerName,HotfixID,InstalledOn

1 个答案:

答案 0 :(得分:0)

您所描述的不是CSV的典型用例,Import-Csv(或Export-Csv)根本无法处理。两个cmdlet都将CSV的行转换为具有以列标题命名的属性的对象,反之亦然。因此,如果要使用*-Csv cmdlet,则列标题必须唯一。

最简单的方法可能是这样的:

# read CSV data into distinct variables
$csv1 = Get-Content 'C:\path\to\1.csv'
$csv2 = Get-Content 'C:\path\to\2.csv'
$csv3 = Get-Content 'C:\path\to\3.csv'

# determine maximum number of rows
$max = $csv1.Count, $csv2.Count, $csv3.Count |
       Sort-Object
       Select-Object -Last 1

# concatenate corresponding rows from each file and write them to the output file
for ($i=0; $i -lt $csv1.Count; $i++) {
    # emulate missing rows in case the CSVs don't have the same number of rows
    $row1 = if ($csv1[$i]) {$csv1[$i]} else {',,'}
    $row2 = if ($csv2[$i]) {$csv2[$i]} else {',,'}
    $row3 = if ($csv3[$i]) {$csv3[$i]} else {',,'}

    "${row1},${row2},${row3}" | Add-Content 'C:\path\to\output.csv'
}