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

PowerShell实现正则匹配结果分两列导出CSV的问题求解

问题根因

原代码无法分列存储的核心问题有3个:

  • 逐行独立匹配正则,没有按JIL的作业块边界做字段配对,所有匹配到的insert_job、machine值是按行顺序平铺的线性列表,没有绑定到同一个作业对象上
  • 直接用Add-Content写入纯文本,没有生成结构化的两列对象,CSV写入逻辑无法识别列边界
  • 正则规则没有覆盖作业名、主机名可能存在的数字、特殊字符场景,容易漏匹配
修正后实现代码

采用逐行遍历+状态记录的方式,按作业块归集字段,最终通过标准CSV导出命令生成两列文件,不会出现错位:

# 配置文件路径
$inputPath = "D:\Users\naham1224\Desktop\jil.txt"
$outputPath = Join-Path $env:USERPROFILE "Desktop\jil2.csv"

# 初始化结果集合和当前作业对象
$jobList = [System.Collections.Generic.List[PSObject]]::new()
$currentJob = $null

# 逐行遍历JIL文件
Get-Content -Path $inputPath | ForEach-Object {
    $line = $_.Trim()
    # 匹配到新作业的起始标记
    if ($line -match '^insert_job:\s*(\S+)') {
        # 之前已有未保存的作业,先加入结果集
        if ($null -ne $currentJob) {
            $jobList.Add($currentJob)
        }
        # 初始化新作业对象
        $currentJob = [PSCustomObject]@{
            insert_job = $matches[1]
            machine    = $null
        }
    }
    # 匹配到当前作业的machine字段
    elseif ($null -ne $currentJob -and $line -match '^machine:\s*(\S+)') {
        $currentJob.machine = $matches[1]
    }
}
# 把文件末尾最后一个作业加入结果集
if ($null -ne $currentJob) {
    $jobList.Add($currentJob)
}

# 导出为标准两列CSV,UTF8编码兼容Excel
$jobList | Export-Csv -Path $outputPath -NoTypeInformation -Encoding UTF8
使用说明
  • 导出的CSV第一列为insert_job(作业名),第二列为machine(运行主机)
  • 逻辑自动适配作业块内字段顺序变化、个别作业缺失machine字段的场景,不会出现跨作业字段错位
  • 如果你的JIL配置中作业名、主机名包含空格等特殊字符,可以对应调整正则里的捕获规则即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:57:16