You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell对比不同列名CSV指定列生成C.csv的脚本修复咨询

问题修复说明

原脚本存在匹配逻辑错误、语法使用错误、空值风险等问题,以下是可直接运行的修正版本,功能为筛选B.csv中存在但A.csv中不存在的Jobstream记录,生成和A.csv格式一致的C.csv文件。

修正后的完整脚本
# 读取A.csv的所有Name值,存入哈希集合提升查询效率
$aNames = @{}
Import-Csv (Join-Path $env:USERPROFILE "Desktop\A.csv") -Delimiter ',' | ForEach-Object {
    $aNames[$_.Name] = $true
}

# 读取B.csv全量数据
$bCsv = Import-Csv (Join-Path $env:USERPROFILE "Archi\B.csv") -Delimiter ','

$output = @()
# 遍历B.csv所有行,筛选不在A中的记录
foreach ($row in $bCsv) {
    $jobstream = $row.Jobstream.Trim()
    # 跳过A中已存在的Name
    if ($aNames.ContainsKey($jobstream)) {
        continue
    }
    # 同个Jobstream默认只保留一条记录,需要保留全部关联Job的话可以注释掉下面3行
    if ($output.Name -contains $jobstream) {
        continue
    }
    # 根据命名规则设置Type
    $type = if ($jobstream -match '[-_]') {
        "TechnologyInteraction"
    } else {
        "TechnologyService"
    }
    # 构造输出对象
    $output += [PSCustomObject]@{
        ID            = [guid]::NewGuid().ToString()
        Type          = $type
        Name          = $jobstream
        Documentation = $row."Job Description"
    }
}

# 确保输出文件夹存在
$exportDir = Join-Path $env:USERPRORE "Desktop\Archi"
if (-not (Test-Path $exportDir)) {
    New-Item -ItemType Directory -Path $exportDir -Force | Out-Null
}

# 导出结果
$output | Select-Object ID, Type, Name, Documentation | Export-Csv (Join-Path $env:USERPROFILE "Desktop\C.csv") -NoTypeInformation -Encoding UTF8
$output | Select-Object ID, Type, Name, Documentation | Export-Csv (Join-Path $exportDir "newElements.csv") -NoTypeInformation -Encoding UTF8
调整说明
  • 优化了匹配效率,用哈希集合代替逐行遍历匹配,数据量大的时候速度提升明显
  • 修正了正则匹配的语法错误,改用-match操作符识别包含-/_的Jobstream
  • 增加了重复记录过滤逻辑,同个Jobstream默认只保留第一条,需要保留所有关联Job的话可以自行注释对应代码
  • 增加了输出文件夹自动创建逻辑,避免路径不存在导致的导出失败
  • 统一了路径拼接方式,避免不同系统环境下的路径格式错误

内容的提问来源于stack exchange,提问作者user16117306

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:24:03