如何用awk解析trace-cmd report输出并提取调用函数?
解析trace-cmd report输出提取函数的正确awk方法
你之前用cat myfile.dat | awk '{print $7}'无效的原因是:不同行的字段数量不一致,$7并非固定对应函数所在的位置,比如部分行的$7是funcgraph_entry或时间统计内容,自然提取不到正确的函数信息。
正确的两种awk写法:
写法一(简洁版)
awk '{sub(/^.*\| /, "")}1' myfile.dat
- 原理:用正则匹配行开头到
|的所有内容,将其替换为空,直接输出处理后的剩余内容,完美保留原有的缩进和函数结构。
写法二(遍历字段版)
awk '{ for(i=1; i<=NF; i++) { if($i ~ /^\|/) { print substr($0, index($0, $i)+1) next } } }' myfile.dat
- 原理:遍历每行的所有字段,找到第一个以
|开头的字段,从该字段的下一个字符开始截取整行内容,确保只保留|之后的函数相关部分。
效果验证
以你提供的输入示例执行上述命令后,输出完全符合期望:
ib_enum_all_devs() { ib_get_device_fw_str(); } ib_enum_all_devs(); ib_device_get_by_index(); ib_get_client_nl_info() { ib_uverbs_get_nl_info(); }
内容的提问来源于stack exchange,提问作者Bahamas
相关产品推荐
相关产品推荐

