shell 脚本处理多行文本的记录 -- awk

51 篇文章 3 订阅
2 篇文章 0 订阅

1、参考awk处理多行文本的记录_weixin_30457465的博客-CSDN博客

     对其中的脚本代码增加注释说明

#!/usr/bin/awk -f

# 设置输入流的分隔符号,根据分割符号拆分为一个个记录record
BEGIN {RS="spawn"} 
{
  # 遍历各个记录,确认本记录内是否存在字符串Version 123
  if(index($0,"Version 123"))
    {
      # 查找确认字符串user_00@位置索引
      at_i=index($0,"user_00@");
      pound_i=index($0,"#36000");
      print substr($0,at_i+8,pound_i-at_i-8) 
    } 
}

2、awk正确表达式中是单引号‘’

3、将输入文件input.c中的函数根据real_t分割为多个子文件,各个子文件名以对应函数的行号

awk '$1 == "real_t" { line=NR } { print $line, $0 >> line".c" }'  input.c

或者 以 ) 为结尾符

awk '{ if ($0~/)$/) { line=NR; print "#include \"my.h\"" >> line".c" } { print $0 >> line".c" }}' input.c

 4、将反汇编dump根据函数为区间,拆分成多个子文件

awk '{ if ($0~/^000000/) { len=length($2); name=substr($2, 2, len-3); } { print $0 >> name".dump" }}'  demo.dump

 

说明:$0~/^000000/ 匹配文本块以000000开始的字符串作为分割

           $2将匹配对应的函数名<_init>:,因此有三个无效字符

           substr字符串下标从1开始,因此去掉第一个字符的第一个参数为2

           文件名有最长字符串限制,可以类似if (len>50) {len=50};进行截断

5、shell 中文件读取操作

while read line; do  # 一次line中记录一行数据

done < file

for i in file;do        # 若一行中有多个参数,按需每次读取一个,也就是并不保证一整行

done

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值