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

过滤源数据后按条件修改ResultName列名的PowerShell需求

满足特定条件修改CSV中ResultName列的PowerShell实现

嘿,针对你需要在满足特定条件时修改CSV文件里ResultName列名的需求,我整理了一套PowerShell的实现方案,具体如下:

核心需求场景

  • 场景1:当TypeIndicator为10的行中,Indicator字段为空或!,且TypeIndicator为ND的行中,Indicator字段也为空或!时:
    • 选中ND对应的行,创建新行
    • 将新行的ResultName修改为类似"Al estimated"的格式
    • 保留原行中Result相关的所有内容

完整实现代码

# 定位目标CSV文件(匹配q:\test\2018\03\27路径下的sample.*格式文件)
$file = Get-ChildItem "q:\test\2018\03\27\sample.*"

# 导入CSV数据并按ResultName分组处理
$processedData = Import-Csv $file.FullName | Group-Object ResultName | ForEach-Object {
    # 筛选当前分组内TypeIndicator为10和ND的行
    $tenRows = $_.Group | Where-Object { $_.TypeIndicator -eq '10' }
    $ndRows = $_.Group | Where-Object { $_.TypeIndicator -eq 'ND' }

    # 判断是否满足场景1的条件:10行的Indicator为空或!,且ND行的Indicator也为空或!
    $meetsCondition = ($tenRows.Indicator -match '^$|!') -and ($ndRows.Indicator -match '^$|!')
    
    if ($meetsCondition) {
        # 遍历所有ND行,创建新行并修改ResultName
        foreach ($ndRow in $ndRows) {
            # 复制原ND行的所有属性,避免破坏原数据
            $newRow = $ndRow.PSObject.Copy()
            # 修改ResultName为「原名称 + estimated」的格式
            $newRow.ResultName = "$($ndRow.ResultName) estimated"
            # 先输出原ND行,再输出新创建的行
            $ndRow
            $newRow
        }
        # 输出分组内的10行数据
        $tenRows
    }
    else {
        # 不满足条件时,直接输出当前分组的所有原始行
        $_.Group
    }
}

# 将处理后的数据导出回CSV(建议操作前先备份原文件!)
$processedData | Export-Csv -Path $file.FullName -NoTypeInformation -Encoding UTF8

代码细节说明

  • 用Get-ChildItem(可缩写为gci)精准定位目标文件,支持匹配sample.*格式的所有相关文件
  • 按ResultName分组处理,确保同一ResultName下的10和ND行被放在一起判断条件
  • 通过PSObject.Copy()复制原行属性,保证新行保留所有Result相关字段,只修改ResultName
  • 导出时使用-NoTypeInformation避免CSV文件头部生成多余的类型信息,-Encoding UTF8确保中文等特殊字符正常显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:23:06