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

PowerShell脚本开发:比对两文件匹配键与十进制数值

PowerShell脚本修正:两文件键值比对方案

文件说明

  • File1:逗号分隔的CSV文件,包含两列,第一列为唯一字符键,第二列为十进制数值
  • File2:CSV格式文件,顶部有多行无关内容,需跳过直到出现Start of Data的行;后续内容为竖线分隔字段,需提取第1列的键和第4列的十进制数值

脚本需求

  • 匹配两个文件中的键,仅处理同时存在于两个文件中的键
  • 对比匹配键对应的十进制数值:
    • 数值完全匹配时,记录为「匹配」
    • 数值不匹配时,输出键、双方数值,可选附带File2的完整行
  • 结果输出到指定CSV报告文件

修正后的PowerShell脚本

# 定义文件路径和输出路径
$file1Path = "C:\test\test1.csv"
$file2Path = "C:\test\test2.csv"
$outputPath = "C:\test\comparisonreport.csv"

# 读取File1,构建键值哈希表(键为第一列,值为第二列的十进制数值)
# 若File1列名固定(如Key/Value),可替换PSObject.Properties为具体列名
$file1Data = @{}
Import-Csv -Path $file1Path -Delimiter ',' | ForEach-Object {
    $file1Data[$_.PSObject.Properties[0].Value] = [decimal]$_.PSObject.Properties[1].Value
}

# 读取File2,跳过无关行直到"Start of Data",处理竖线分隔内容
$file2Data = Get-Content -Path $file2Path | 
    Select-Object -SkipUntil { $_ -eq "Start of Data" } | 
    Select-Object -Skip 1 | 
    ForEach-Object {
        $fields = $_.Split('|').Trim()
        if ($fields.Count -ge 4) {
            [PSCustomObject]@{
                Key       = $fields[0]
                Value     = [decimal]$fields[3]
                FullLine  = $_ # 保留完整行,不需要可删除
            }
        }
    }

# 对比数据生成结果
$comparisonResults = @()
foreach ($entry in $file2Data) {
    if ($file1Data.ContainsKey($entry.Key)) {
        $file1Value = $file1Data[$entry.Key]
        $matchStatus = if ($file1Value -eq $entry.Value) { "匹配" } else { "不匹配" }
        
        $result = [PSCustomObject]@{
            Key           = $entry.Key
            File1_Value   = $file1Value
            File2_Value   = $entry.Value
            Match_Status  = $matchStatus
            File2_FullLine= $entry.FullLine # 可选字段,不需要可删除
        }
        $comparisonResults += $result
    }
}

# 导出结果到CSV
$comparisonResults | Export-Csv -Path $outputPath -NoTypeInformation -Encoding UTF8

脚本说明

  1. File1处理:

    • 用哈希表存储File1的键值对,实现O(1)级别的键查找效率
    • 若File1列名固定(如ID和Amount),可替换PSObject.Properties[0].Value为$_.ID、PSObject.Properties[1].Value为$_.Amount,提升代码可读性
  2. File2处理:

    • 通过Select-Object -SkipUntil精准跳过无关内容,只处理Start of Data之后的有效行
    • 分割竖线字段时自动去除前后空格,避免因格式问题导致的匹配错误
  3. 对比逻辑:

    • 只处理两个文件共有的键,过滤无匹配的条目
    • 强制转换为decimal类型进行数值对比,避免字符串比对的误差
  4. 输出设置:

    • 使用-NoTypeInformation避免CSV文件头部生成冗余类型信息
    • 指定UTF8编码保证中文环境下的兼容性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:41:10