如何实现文本行的条件注释插入?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
相关产品推荐
相关产品推荐

