如何在PowerShell中将指定CSV文件的列合并到目标CSV并实现行对应匹配
按行一一合并两个CSV文件的PowerShell解决方案
没问题,这种行数匹配的CSV按行合并需求用PowerShell原生代码就能轻松搞定。下面是具体的实现步骤和代码:
步骤说明
因为你的两个CSV文件行数完全一致,我们可以通过索引定位对应行的方式,把csv2的FullName字段追加到csv1的每一行中,最后导出成包含三列的新CSV。
完整代码示例
首先我们先做个简单的行数检查(避免行数不匹配导致合并出错),然后执行合并:
# 导入两个CSV文件(你已经完成这一步,这里可以直接复用) $csv1 = Import-Csv C:\Tools\csv1.csv $csv2 = Import-Csv C:\Tools\csv2.csv # 检查两个CSV的行数是否一致 if ($csv1.Count -ne $csv2.Count) { Write-Error "错误:两个CSV文件的行数不匹配,无法按行一一合并!" exit } # 循环遍历每一行,合并对应内容 $mergedCsv = for ($i = 0; $i -lt $csv1.Count; $i++) { [PSCustomObject]@{ School = $csv1[$i].School Class = $csv1[$i].Class FullName = $csv2[$i].FullName } } # 导出合并后的CSV文件(指定UTF8编码避免乱码,-NoTypeInformation去掉PowerShell默认的类型行) $mergedCsv | Export-Csv -Path C:\Tools\merged.csv -NoTypeInformation -Encoding UTF8
另一种写法(用ForEach-Object遍历)
如果你更习惯管道式写法,也可以用ForEach-Object结合索引变量来实现:
$csv1 = Import-Csv C:\Tools\csv1.csv $csv2 = Import-Csv C:\Tools\csv2.csv if ($csv1.Count -ne $csv2.Count) { Write-Error "错误:两个CSV文件的行数不匹配!" exit } $index = 0 $mergedCsv = $csv1 | ForEach-Object { # 把当前行的School、Class和csv2对应行的FullName组合成新对象 [PSCustomObject]@{ School = $_.School Class = $_.Class FullName = $csv2[$index].FullName } $index++ # 每次循环后索引加1,匹配下一行 } $mergedCsv | Export-Csv -Path C:\Tools\merged.csv -NoTypeInformation -Encoding UTF8
结果验证
执行完代码后,你会在C:\Tools目录下得到merged.csv,内容就是你想要的格式:
School Class FullName
School1 C1 Fullname1
School2 c2 Fullname2
School3 c3 Fullname3
内容的提问来源于stack exchange,提问作者Guillaume vM M
相关产品推荐
相关产品推荐

