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

如何实现文本行的条件注释插入?AWK脚本适配求助

修正AWK脚本以处理多行代码块需求

需求说明

处理文本文件时,满足以下任一条件的行直接输出,否则在行首插入//后输出:

  • 行首字段为小写的type或const
  • 行包含()且不含ch+数字(如ch6)
  • 属于以含{的行开头、以行首}结尾的多行结构内的所有行
  • 行以//开头
  • 空行或全空白行
  • 行同时包含{和}

原脚本问题

原脚本未实现状态跟踪逻辑,无法识别并保留从{开始到行首}结束的多行代码块,导致块内的非条件行被错误注释。

修正后的AWK脚本

BEGIN {
    in_block = 0  # 标记是否处于多行代码块内
}

# 处理空行或全空白行
/^[[:space:]]*$/ {
    print
    next
}

# 处理以//开头的行
/^\/\// {
    print
    next
}

# 处于多行块内的情况
in_block == 1 {
    print
    # 检查是否是块结束行(行首为})
    if ($0 ~ /^[[:space:]]*}/) {
        in_block = 0
    }
    next
}

# 不在块内时检查其他条件
{
    # 条件1:行首是type或const(小写)
    if ($1 ~ /^type$/ || $1 ~ /^const$/) {
        print
    }
    # 条件2:包含()且不含ch+数字
    else if ($0 ~ /\(/ && $0 !~ /ch[0-9]+/) {
        print
    }
    # 条件6:同时包含{和}
    else if ($0 ~ /{/ && $0 ~ /}/) {
        print
    }
    # 条件3:进入多行块(行包含{)
    else if ($0 ~ /{/) {
        in_block = 1
        print
    }
    # 其他情况:添加//注释
    else {
        print "//" $0
    }
}

关键逻辑说明

  • 用in_block变量跟踪是否处于多行代码块中,初始值为0(不在块内)
  • 优先处理空行、注释行,以及块内的所有行,确保这些行直接输出
  • 当遇到包含{的行且不在块内时,标记进入块;当遇到行首为}的行且在块内时,标记退出块
  • 逐一匹配剩余条件,未匹配到的行添加//注释

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:37:46