上期给大家完整拆解了grep筛选命令,没看过的朋友可以翻一翻往期干货~
今天咱们主攻awk。后端日常解析时序报告、网表、日志文件,想要快速筛选、抓取指定列信息,全靠 awk。默认空格分隔、搭配管道命令使用,上手简单、效率拉满,是后端工程师必备的文本处理神器。
awk 核心用途:抓取文本中指定列信息,默认以空格/空白符作为分隔符,常和 grep 、sed 等命令组合,快速筛选、提取目标数据。
一、后端经典实战案例
日常分析时序报告最常用组合命令:
grep "Startpoint" rpt | awk '{print $3}' | sort -u > reg2reg_startpoint.lst
命令详解:
1、grep "Startpoint" rpt:筛选 rpt 报告中所有包含 Startpoint 的行;
2、awk '{print $3}':提取筛选后每一行的第三列内容;
3、sort -u :排序去重
4、> reg2reg_startpoint.lst:将抓取到的所有数据,输出保存到指定文件,方便后续复盘统计。
二、awk 标准通用语法
固定格式(日常基本都用单引号,为行业通用规范)
awk [option] 'pattern{action}' file > file2
•option:可选参数(如指定分隔符)
•pattern:匹配条件/筛选规则
•action:匹配成功后执行的动作(打印、输出等)
三、awk 核心内置变量(必记)
这几个变量是后端处理报告、日志最高频用法,建议直接熟记:
•$0:输出当前整行所有内容
•$1、$2、$3...:第一列、第二列、第三列,列数从 1 开始计数
•$NF:当前行最后一列
•$(NF-1):倒数第二列
•$(NF-2):倒数第三列,以此类推
•NF:打印当前行的总列数
•NR:打印当前读取的行号
四、基础高频实操命令
1、打印文件整行内容
awk '{print $0}' file
2、打印多列内容(区分拼接/空格分隔)
两列无缝拼接(无空格):
awk '{print $1$2}' file
示例:第一列为 a、第二列为 b,输出结果为 ab
两列空格分隔(规范常用):
awk '{print $1,$2}' file
示例:第一列为 a、第二列为 b,输出结果为 a b
3、自定义拼接文字(DIY 输出格式)
可自行添加注释、标识文字,双引号包裹自定义字符,逗号分隔变量:
awk '{print "模块名称:", $1}' file
4、手动指定分隔符(-F)
默认按空格分隔,遇到斜杠、逗号、冒号等分隔的文本,用-F指定分隔符:
awk -F '/' '{print $1}' file
释义:以/作为分隔符,只提取第一列内容。
五、进阶筛选用法(时序报告分析必备)
支持常规关系运算:==、!=、>=、<=、>、<,先判断条件,再执行输出动作。
1、按列数筛选输出
只匹配「恰好5列」的行,输出该行第一列:
awk 'NF==5 {print $1}' file
2、按行号范围筛选
只打印第 3~6 行的所有内容:
awk 'NR>=3 && NR<=6 {print $0}' file
3、正则区间匹配(批量截取段落)
从第一次匹配「正则1」的行开始,到第一次匹配「正则2」的行结束,区间内所有行全部输出:
awk '/正则1/,/正则2/ {print $0}' file
六、文末小结
以上所有用法,都是后端日常处理 timing 报告、日志、网表文件的最高频操作。
建议大家收藏笔记、熟练掌握,后续批量提取寄存器、端口、时序路径数据,不用反复查文档,大幅提升工作效率。
后续持续更新 sed 命令、TCL 脚本、PNR 实战干货,专注后端工程师成长,关注不迷路!