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

如何使用PowerShell对比同一CSV内两列数据并生成匹配结果列

PowerShell 实现同CSV文件内两列数据比对新增匹配列

场景1:同一行内两列精确匹配

逐行判断当前行的两个目标列值是否一致,匹配则在新增列写入匹配值,不匹配写入0/空值。

# 导入目标CSV文件,替换为实际文件路径
$csvContent = Import-Csv -Path "D:\data\source.csv"

# 逐行处理,注意将Column1、Column2替换为你CSV中实际要比对的两列表头名
$processedData = $csvContent | ForEach-Object {
    # 先做空值校验,避免空值比对报错
    if (-not [string]::IsNullOrWhiteSpace($_.Column1) -and $_.Column1 -eq $_.Column2) {
        # 匹配成功,写入匹配到的数值
        $_ | Add-Member -MemberType NoteProperty -Name "MatchResult" -Value $_.Column1 -Force
    }
    else {
        # 匹配失败,此处写0则输出0,替换为$null则输出空值
        $_ | Add-Member -MemberType NoteProperty -Name "MatchResult" -Value 0 -Force
    }
    $_
}

# 导出处理结果到新CSV文件,指定UTF8编码避免中文乱码
$processedData | Export-Csv -Path "D:\data\match_result.csv" -NoTypeInformation -Encoding UTF8

场景2:单列值遍历全表另一列查找匹配

如果需求是取某一列的每个值,遍历整个CSV所有行的另一列查找是否存在匹配项,而非仅比对同一行的值,使用以下实现:

$csvContent = Import-Csv -Path "D:\data\source.csv"
# 提前提取目标匹配列的所有非空值存入数组,提升遍历匹配效率
$targetMatchList = $csvContent.Column2 | Where-Object { -not [string]::IsNullOrWhiteSpace($_) }

$processedData = $csvContent | ForEach-Object {
    $currentCheckValue = $_.Column1
    if ($targetMatchList -contains $currentCheckValue) {
        $_ | Add-Member -MemberType NoteProperty -Name "MatchResult" -Value $currentCheckValue -Force
    }
    else {
        $_ | Add-Member -MemberType NoteProperty -Name "MatchResult" -Value 0 -Force
    }
    $_
}

$processedData | Export-Csv -Path "D:\data\match_result.csv" -NoTypeInformation -Encoding UTF8

调整说明

  • 代码中Column1、Column2需替换为CSV文件实际的表头列名,可先打开CSV确认第一行的表头文本,注意大小写不敏感但不要打错字符
  • 如果需要模糊匹配,可将精确比对运算符-eq替换为-like,配合通配符编写规则,例如$_.Column1 -like "*$($_.Column2)*"即代表Column1包含Column2的值就算匹配成功
  • 匹配失败的返回值可按需调整,需要空值时将代码中赋值的0替换为$null即可
  • 若使用PowerShell 7及以上版本,导出编码可替换为utf8NoBOM,适配更多办公软件的打开需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.10 16:15:47