使用PowerShell对比行值合并不同行数CSV文件的方法咨询
PowerShell合并同主键CSV文件解决方案
现有代码问题排查
- 列定义错误:
Select-Object参数里重复写了Service_StatusA,遗漏了Service_StatusB,末尾还有多余逗号,导致生成的行对象结构不符合预期 - 丢失无匹配行:只有匹配到第二个CSV的行才会加入结果,第一个CSV里存在但第二个CSV里没有的条目(比如示例中的Data Usage)直接被丢弃
- 隐式匹配问题:如果两个CSV的Name列存在首尾空格或大小写差异,会导致本应匹配的条目匹配失败
修正后可用代码
$file1 = Import-Csv -Path .\PC1.csv $file2 = Import-Csv -Path .\PC2.csv # 直接用循环输出赋值数组,避免+=反复创建数组的性能损耗 $report = foreach ($line in $file1) { # 匹配时自动去除首尾空格,避免格式问题导致匹配失败 $match = $file2 | Where-Object {$_.Name.Trim() -eq $line.Name.Trim()} # 构造输出对象,无匹配的StatusB列自动留空 [PSCustomObject]@{ Name = $line.Name Service_StatusA = $line.Service_StatusA Service_StatusB = if($match){$match.Service_StatusB}else{$null} } } # 增加UTF8编码避免中文名称乱码 $report | Export-Csv -Path .\mergetemp.csv -NoTypeInformation -Force -Encoding UTF8
内容的提问来源于stack exchange,提问作者Enigma
相关产品推荐
相关产品推荐

