【问题标题】:Merge two CSV files with no headers in Powershell在 Powershell 中合并两个没有标题的 CSV 文件
【发布时间】:2015-03-12 23:40:10
【问题描述】:

我有两个 CSV 文件,但都没有标题。两个 CSV 文件中的行数相同。这是一个例子:

csv1.csv:
1,2
3,4
5,6

csv2.csv:
a,b
c,d
e,f

我希望输出如下所示:
1,2,a,b
3,4,c,d
5,6,e,f

我不想添加标题或类似的东西。我只想从 csv2.csv 中提取第 1 列和第 2 列并将它们粘贴到 csv1.csv 的第 3 列和第 4 列,或者只是导出到组合的 csv。

感谢任何帮助。谢谢!

【问题讨论】:

  • 我只是注意到我的格式发生了变化。 csv1 和 csv2 行应该只有两列宽,所以 1,2 在第一行,3,4 在第二行。同样适用于 csv2。合并后的输出将是 4 列宽。

标签: powershell export-to-csv


【解决方案1】:

很简单,只需忽略它们是 CSV 文件这一事实,用于基于行数的 For 循环,并用逗号连接每一行。

$CSV1 = Get-Content C:\Path\To\File1.csv
$CSV2 = Get-Content C:\Path\To\File2.csv
For($i=0;$i -lt $csv1.count;$i++){
    $CSV1[$i],$CSV2[$i] -join ','|Out-File C:\Path\to\NewFile.CSV
}

这应该会根据需要输出一个文件:
1,2,a,b
3,4,c,d
5,6,e,f

【讨论】:

  • 非常感谢!我非常喜欢它是一个 csv 并使用 import-csv 来操作!我唯一需要添加的是在输出文件中添加一个“-append”。
【解决方案2】:

如果你想让这个非常简单,并将第二个 csv 添加到第一个的末尾,你可以这样做

$csv1 = Get-Content C:\path\to\first.csv
$csv2 = Get-Content C:\path\to\second.csv

"$csv1,$csv2" | Add-Content C:\path\to\third.csv

输出看起来像

a,b,c,d,e,f,g,h,i,1,2,3,4,5,6,7,8,9

【讨论】:

  • 感谢您的回复。不完全是我想要的。这给了我一个单行文件。我需要文件有 4 行深。
【解决方案3】:

可能是这样的 - 我让它只包含两个文件中都存在的行,但您可能有不同的要求。

$lines1 = Get-Content "File1.csv"
$lines2 = Get-Content "File2.csv"
$destination = "Combined.csv"

# Make sure the destination file doesn't already exist
Remove-Item $destination

$length = [Math]::Min($lines1.Length, $lines2.Length)
for ($index = 0; $index -lt $length; $index++)
{
    # Append rows
    Add-Content $destination ($lines1[$index] + ", " + $lines2[$index])
}

【讨论】:

    【解决方案4】:

    我知道您要求使用 powershell 解决方案,但一个鲜为人知的事实是您可以像这样在 DOS 中合并文件:

    COPY File.CSV + File2.CSV OutputFile.CSV

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-21
      • 2021-12-13
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      • 2014-09-24
      • 2016-03-16
      相关资源
      最近更新 更多