簡體   English   中英

PowerShell Import-Csv列的多個CSV串聯

[英]PowerShell Import-Csv multiple CSV concatenation of columns

我想將多個具有3列和100行的.csv文件導入到單個.csv文件中,每次導入都進入接下來的3列(ABC-DEF-GHI)中,而不是全部並入前1000列的前3列中行。

我嘗試了Import-Csv但無法控制輸出的位置。 我將不得不使用COM對象( New-Object -ComObject excel.Application )還是有一種更干凈的方法來控制導入到哪個單元格?

標題行是

PSComputerName,HotfixID,InstalledOn

但是我需要讓每個循環都可以寫,而不是在下面。

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

您所描述的不是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'
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM