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

求编写Shell脚本:根据多条件筛选文件中List条目对应的Acronym字段

求编写Shell脚本:根据多条件筛选文件中List条目对应的Acronym字段

没问题,我来帮你搞定这个需求!针对你给出的这种分段结构化的文本,用awk来处理是最省心的,它能完美应对这种按条目分组的文本解析。

下面是符合你要求的脚本,直接就能用:

awk '
BEGIN {
    # 初始化变量,用来暂存当前条目的各个关键字段
    acronym = ""
    is_default = ""
    state = ""
    instances = ""
}
# 当遇到List下的新条目时,先检查上一个条目是否符合条件
/^Name: / && in_list {
    # 三个条件同时满足时输出对应的Acronym
    if (is_default == "false" && state == "State[Inactive]" && instances == "0") {
        print acronym
    }
    # 重置变量,准备处理新条目
    acronym = ""
    is_default = ""
    state = ""
    instances = ""
}
# 标记开始处理List下面的内容
/^List:/ {
    in_list = 1
    next
}
# 在List范围内,提取各个需要的字段值
in_list {
    if (/^Acronym: /) {
        acronym = $2
    } else if (/^Is Default: /) {
        is_default = $3
    } else if (/^State: /) {
        state = $2
    } else if (/^No of running instances: /) {
        instances = $5
    }
}
# 处理文件最后一个条目,避免遗漏检查
END {
    if (is_default == "false" && state == "State[Inactive]" && instances == "0") {
        print acronym
    }
}
' your_file.txt

脚本逻辑说明:

  1. 初始化变量:在脚本开始时,先定义几个变量用来暂存每个条目的Acronym、Is Default等值;
  2. 标记List区域:当读到List:这一行时,开启List区域的处理开关;
  3. 提取字段:在List区域内,分别捕获每个条目的Acronym、Is Default、State、运行实例数这几个关键值;
  4. 条件检查:每当遇到下一个条目的Name:行时,就检查上一个条目的三个条件是否都满足,满足则输出Acronym;
  5. 收尾处理:脚本结束前,再检查最后一个条目,避免因为文件末尾没有新的Name:行而漏掉。

使用方法:

把脚本里的your_file.txt替换成你实际的文件名,直接在终端运行这个脚本,就能得到你想要的结果——比如你示例里的TEST11_1。

如果你的文本格式有细微调整(比如空格数量变化),这个脚本也能正常工作;要是你想更灵活地匹配State里的Inactive(比如不严格匹配整个State[Inactive]字符串),可以把条件改成state ~ /Inactive/就行。

备注:内容来源于stack exchange,提问作者Dave Dolone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 09:49:32