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

批量处理含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

逻辑拆解

  1. 字段拆分:先把每行按空格、{、;拆分,这样每个关键信息(宏名、PIN值、方向值)都会变成单独的字段,方便提取。
  2. MACRO行处理:遇到以MACRO开头的行,先把宏名存起来,然后按照你要的格式拼接内容——把宏名追加到MACRO后、PIN字段后,再把宏名+PIN字段追加到DIRECTION前。
  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:56:42