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

如何从boinccmd输出中提取并关联name与fraction done字段

解决方案:用awk关联任务的name与fraction done字段

可以通过awk处理boinccmd --get_tasks的输出,利用变量保存上下文状态,实现同一任务的两个字段关联输出,同时自动过滤不含fraction done的任务:

boinccmd --get_tasks | awk '
    /^name: / {
        # 若存在未匹配到fraction done的旧任务名,直接丢弃
        if (current_name != "") current_name = ""
        # 提取并保存当前任务名(跳过"name: "前缀)
        current_name = substr($0, 7)
        next
    }
    /^fraction done: / {
        # 仅当有已保存的任务名时,才输出关联结果
        if (current_name != "") {
            printf "%s\t%s\n", current_name, substr($0, 16)
            # 输出后清空变量,准备处理下一个任务
            current_name = ""
        }
        next
    }
'

逻辑说明

  1. 匹配以name: 开头的行时,保存当前任务名到变量current_name;如果之前有未找到对应fraction done的任务名,直接清空,避免残留无效数据。
  2. 匹配以fraction done: 开头的行时,检查是否有已保存的任务名:
    • 若有,则将任务名与进度值按行输出(用制表符分隔,可根据需求换成空格或其他分隔符)
    • 输出后清空current_name,确保不会和下一个任务的字段混淆
  3. 所有非目标行直接忽略,不影响处理流程

替代方案(sed+awk组合)

如果偏好分步骤处理,也可以先将每个任务的块合并为单行,再提取字段,但awk单命令的方式更高效:

boinccmd --get_tasks | sed -e '/^name:/{:a;N;/fraction done:/!ba;s/\n/ /g}' | awk '/fraction done:/ {print $2, $NF}'

这个方法先将包含name和fraction done的任务块合并为一行,再提取对应字段,但对输出格式的一致性要求更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:52:05