如何合并grep与awk命令提取指定行及output、input前序行
单行合并命令实现方案
你之前拆分执行的三个命令存在一个核心问题:分别执行后得到的输出会完全打乱原文件的行先后顺序,无法直接拼接成符合预期的块结构输出。通过单条awk命令完成全量遍历匹配,就能一次性得到目标结果,同时严格保留原文件的行序。
核心匹配规则
脚本遍历文件每一行,按照以下规则判断是否保留内容:
- 直接保留三类固定特征行:以
cell、function、Type开头的行 - 匹配到
output、input行时,将该行紧邻的上一行、当前行一同输出 - 其余无关行(如示例中的
Next state、Test cell、Hold rising、Min_pulse_width)直接跳过不输出
可直接运行的完整命令
awk ' /^cell |^function |^Type / { print $0 last_line = $0 next } /^output$/ { print last_line print $0 next } /^input$/ { print last_line print $0 next } { last_line = $0 } ' 目标文件路径
效果说明
- 命令严格按照原文件的行扫描顺序输出匹配内容,不会出现多命令拼接导致的块结构错乱
- 完全匹配你需要的输出格式:每个cell块下依次保留function行、Type行、端口名+output/input的成对行,剔除所有冗余参数行
- 端口行的匹配逻辑和你之前单独编写的awk逻辑完全一致,能正确识别output/input前面紧邻的端口名行(如示例中的
(CO)、(Z)、(A1)等内容)
注意:匹配规则里的
Type是按示例中的大写开头写的,如果你的实际文件中是小写t的type,需要对应调整匹配关键字,避免漏提取。
内容的提问来源于stack exchange,提问作者Shreya
相关产品推荐
相关产品推荐

