【问题标题】:Import column from multiple csv to a new csv powershell将列从多个 csv 导入到新的 csv powershell
【发布时间】:2019-03-17 00:26:47
【问题描述】:

你好,我是一个新手,在 powershell 上挣扎得很厉害。

我有 5 个 csv 文件,它们都有 1 列。我想从每个 csv 文件中取出列并将它们放入一个新的 csv 文件中,并将从 5 个 csv 文件中取出的每一列作为新 csv 中的单独列

结果是这样的

temp1 | temp2 | temp3 | temp4 | temp5|

有人可以帮我解决这个问题

【问题讨论】:

  • 到目前为止你尝试过什么?请出示您的代码。
  • 假设它们都有相同的行数...将文件加载到独立的 $Vars 中,遍历其中一个,构建一个 PSCustomObject,其中每个 $Var 都有一个道具,然后导出到 CSV 文件。
  • 这些输入的 CSV 文件(或所有这些文件)是否有标题,或者它们只是一个新行的值列表?

标签: powershell csv export-to-csv


【解决方案1】:

这应该可行。它是逗号分隔的数据。我不知道您是否希望根据您的问题进行管道分隔,或者是否出于演示目的。我也无法判断临时命名法是否是您想要的列的新值,或者它是否已经是每个文件中每个列的名称。它假定您的数据中没有逗号。

$CSV1 = Get-Content csv1.csv
$CSV2 = Get-Content csv2.csv
$CSV3 = Get-Content csv3.csv
$CSV4 = Get-Content csv4.csv
$CSV5 = Get-Content csv5.csv
$MostRows = ($CSV1.count,$CSV2.count,$CSV3.count,$CSV4.count,$CSV5.count | Sort-Object -Descending)[0]

$Output = For ($i = 0; $i -lt $MostRows; $i++) {
    $CSV1[$i],$CSV2[$i],$CSV3[$i],$CSV4[$i],$CSV5[$i] -Join ","
}

$Output | Set-Content NewCSV.csv

这是一种使用对象并保护数据中逗号的替代方法。这将使用您的临时命名法作为列名。这可以通过更新哈希表中的名称手动调整为您喜欢的任何内容。

$CSV1 = Get-Content csv1.csv
$CSV2 = Get-Content csv2.csv
$CSV3 = Get-Content csv3.csv
$CSV4 = Get-Content csv4.csv
$CSV5 = Get-Content csv5.csv
$MostRows = ($CSV1.count,$CSV2.count,$CSV3.count,$CSV4.count,$CSV5.count | Sort-Object -Descending)[0]

$Output = For ($i = 0; $i -lt $MostRows; $i++) {
    [pscustomobject][ordered]@{"temp1"=$CSV1[$i];"temp2"=$CSV2[$i];"temp3"=$CSV3[$i];"temp4"=$CSV4[$i];"temp5"=$CSV5[$i]}
}

$Output | Export-CSV NewCSV.csv -notypeinformation

【讨论】:

  • 这是假设输入 CSV 文件根本不是 csv 文件,而是没有 CSV 标头的值列表。从没有例子的问题来看,不知道是否确实如此。
  • @Theo,这是正确的。我觉得缺少一些重要信息来组成理想的解决方案。
猜你喜欢
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多