批量处理含CELL的文件:追加文件名至PIN、复用行内容至DIRECTION的方法
用Awk实现你的文本处理需求
我专门帮你写了一个Awk脚本,完全匹配你描述的需求,不管是100个还是更多CELL都能轻松处理。先看核心实现,再给你拆解逻辑:
实现脚本
你可以把下面的代码保存成process_cells.awk文件:
BEGIN { # 设置字段分隔符:空格、左大括号、分号,方便拆分每行内容 FS = " |{|;" } # 处理以MACRO开头的行 /^MACRO/ { # 提取宏名称、PIN参数、DIRECTION参数 macro_name = $2 pin_value = $4 direction_value = $7 # 按照期望格式输出 printf "MACRO %s %s PIN %s %s PIN %s DIRECTION %s ;\n", macro_name, macro_name, pin_value, macro_name, pin_value, direction_value # 跳过后续逻辑,处理下一行 next } # 处理以PIN开头的行 /^PIN/ { # 提取当前行的PIN参数、DIRECTION参数 pin_value = $2 direction_value = $5 # 使用最近一次记录的宏名称,按照格式输出 printf "%s PIN %s %s PIN %s DIRECTION %s ;\n", macro_name, pin_value, macro_name, pin_value, direction_value }
怎么用?
假设你的输入文件叫cells.txt,在终端里运行这个命令就行:
awk -f process_cells.awk cells.txt
如果你不想单独存脚本,也可以用一行命令搞定:
awk 'BEGIN{FS=" |{|;"} /^MACRO/{m=$2;p=$4;d=$7;printf "MACRO %s %s PIN %s %s PIN %s DIRECTION %s ;\n",m,m,p,m,p,d;next} /^PIN/{p=$2;d=$5;printf "%s PIN %s %s PIN %s DIRECTION %s ;\n",m,p,m,p,d}' cells.txt
逻辑拆解
- 字段拆分:先把每行按空格、
{、;拆分,这样每个关键信息(宏名、PIN值、方向值)都会变成单独的字段,方便提取。 - MACRO行处理:遇到以
MACRO开头的行,先把宏名存起来,然后按照你要的格式拼接内容——把宏名追加到MACRO后、PIN字段后,再把宏名+PIN字段追加到DIRECTION前。 - PIN行处理:遇到以
PIN开头的行,直接用之前存好的宏名,重复同样的拼接逻辑,输出符合要求的内容。
验证你的例子
把你给的输入内容放到cells.txt里,运行脚本后,输出完全和你期望的一致:
MACRO x1 x1 PIN low x1 PIN low DIRECTION INPUT ;
x1 PIN low x1 PIN low DIRECTION INPUT ;
MACRO u1 u1 PIN S1 u1 PIN S1 DIRECTION INPUT ;
u1 PIN S2 u1 PIN S2 DIRECTION INOUT ;
内容的提问来源于stack exchange,提问作者akshay siddamal
相关产品推荐
相关产品推荐

