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

使用PowerShell统计日志文件各会话块的failure出现次数

按会话块统计日志中"failure"出现次数的PowerShell解决方案

我来帮你调整脚本,实现按每个会话块单独统计"failure"的出现次数,同时还能解决原脚本里一行多个failure只算1次的小问题。

完整实现脚本

# 读取整个日志文件内容,保留换行结构
$logContent = Get-Content -Path E:\shell\lot.log -Raw

# 按会话开头的标记分割日志,过滤掉空的分割块
$sessionBlocks = $logContent -split '^---Session \d+$', 0, 'Multiline' | Where-Object { $_ -match '\S' }

# 遍历每个会话块进行统计
foreach ($block in $sessionBlocks) {
    # 提取会话名称(取块的第一行内容)
    $sessionName = ($block -split "`n")[0].Trim()
    # 统计当前会话块中"failure"的总出现次数
    $failureCount = ($block | Select-String -Pattern 'failure' -AllMatches).Matches.Count
    # 输出统计结果
    Write-Output "$sessionName : 共出现 $failureCount 次failure"
}

脚本说明

  • 读取日志内容:用Get-Content -Raw一次性读取整个文件,这样能完整保留日志的换行和块结构,方便后续按会话分割。
  • 分割会话块:通过正则表达式^---Session \d+$匹配每个会话的开头行,Multiline参数让^能匹配每行的起始位置,分割后过滤掉空块避免无效遍历。
  • 统计每个会话的failure:
    • 先从会话块的第一行提取会话名称(比如Session 1);
    • 用Select-String -AllMatches找到块内所有的"failure"匹配项,通过Matches.Count得到准确的出现次数(解决了原脚本一行多failure只算1次的问题);
    • 最后输出每个会话的统计结果。

测试结果

针对你给出的日志示例,运行脚本后会输出:

Session 1 : 共出现 2 次failure
Session 2 : 共出现 1 次failure
Session 3 : 共出现 2 次failure

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:52:41