PowerShell如何定位行内单词位置并提取FAILED列值
PowerShell提取统计结果指定列值方案
定位单行指定位置的单词
要取$RC[1]即Dirs开头行的第7个单词,直接用正则按空白分割字符串即可,PowerShell的-split操作符会自动处理连续的对齐空格,过滤空条目:
# 提取Dirs行的第7个单词(索引从0开始计数,第7个对应索引6) $dirFailed = ($RC[1] -split '\s+' | Where-Object { $_ })[6]
执行后$dirFailed的返回值就是对应位置的0。
提取FAILED列所有值(推荐)
按固定索引取值容易因为数值带单位、列宽变化出现偏移,推荐先定位表头中FAILED列的位置,再逐行提取对应值,鲁棒性更高:
# 第一步:从表头定位FAILED列的位置 $headerColumns = $RC[0] -split '\s+' | Where-Object { $_ } $failedColPos = [array]::IndexOf($headerColumns, 'FAILED') # 第二步:逐行提取对应列的值,跳过表头 $allFailedValues = foreach ($line in $RC | Select-Object -Skip 1) { $columns = $line -split '\s+' | Where-Object { $_ } # 若需要带单位(比如Bytes行的136.37 m),保留以下判断逻辑 if ($columns[$failedColPos + 1] -match '^[bkmgt]$') { "$($columns[$failedColPos]) $($columns[$failedColPos+1])" } # 若只需要纯数值,直接返回$columns[$failedColPos]即可,删掉上面的if块 else { $columns[$failedColPos] } }
执行完成后,$allFailedValues数组会按顺序存储Dirs、Files、Bytes三行的FAILED列值,直接用于后续比对即可。
小提示:如果你的
$RC是单个多行字符串而非逐行的数组,先执行$RC = $RC -split "r?n"拆分为行数组,再运行上述代码即可。
内容的提问来源于stack exchange,提问作者Vikas Sharma
相关产品推荐
相关产品推荐

