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

PowerShell提取txt中CPU编号与%idle值输出指定格式JSON

问题背景

现有保存在txt文件中的mpstat输出内容如下:

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    0.21    0.00    0.08    0.00    0.00    0.00    0.00    0.00    0.00   99.71
Average:       0    1.01    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   98.99
Average:       1    0.00    0.00    0.52    0.00    0.00    0.00    0.00    0.00    0.00   99.48

需求为提取每行第二列的CPU编号、最后一列的%idle值,输出为包含Num、Data两个字段的对象数组格式JSON,预期结果如下:

[
  {"Num":"all","Data":"99.71"},
  {"Num":"0","Data":"98.99"},
  {"Num":"1","Data":"99.48"}
]

现有PowerShell代码输出的是字符串数组格式的JSON,不符合需求,原代码如下:

$file = Join-Path $PSScriptRoot cpu.txt
# 创建统计临时文件
$cpu_stats = mpstat -P ALL 1 2 | grep Average > $file
# 提取CPU编号列和%idle列
$info_json = Get-Content $file | Select-object -skip 1| Foreach {"Num_$(($_ -split '\s+',12)[1,11])"} | ConvertTo-Json
# 输出JSON结果
Write-Output $info_json
修改方案

原代码问题在于ForEach循环中输出的是拼接字符串,而非结构化对象,因此序列化后得到的是字符串数组。只需要将循环内的逻辑改为返回带对应属性的自定义对象即可,修改后完整代码如下:

$file = Join-Path $PSScriptRoot cpu.txt
# 创建统计临时文件
mpstat -P ALL 1 2 | grep Average > $file
# 提取字段生成自定义对象数组
$info_array = Get-Content $file | Select-Object -Skip 1 | ForEach-Object {
    $columns = $_ -split '\s+', 12
    [PSCustomObject]@{
        Num = $columns[1]
        Data = $columns[11]
    }
}
# 转换为符合要求的JSON
$info_json = $info_array | ConvertTo-Json
# 输出结果
Write-Output $info_json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:36:01