免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7094 | 回复: 12
打印 上一主题 下一主题

[文本处理] 请教sed/awk截取处理一段文本的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-07 12:37 |只看该作者 |倒序浏览
本帖最后由 psfan 于 2012-09-07 12:44 编辑

有如下一段LOG日志,每一段记录用“Record X-----------”分隔,每一段记录里项目数不定,日志内容包括3列内容,格式为标题(指ID,STATE,NUM那行)-空1行-数据-空1行-1~2行不等的统计信息(这里用“xxx”示意,没有特征字符)- 空两行开始以“Record X----------”开头进行下一段记录。

现在想提取每一段记录中的“数据”部分(比如A的第4~10行和B的19~23行)并计算各段Num之和。对于这种非定长的字段不知道该如何处理,想了好几天还没搞定,特来请教高手指点。最好用sed/awk解决。先谢谢了。
  1. Record A--------------------               
  2. ID                STATE        Num

  3. 42112        Running        4               
  4. 42175        Running        8               
  5. 38897        Running        1               
  6. 39279        Running        8               
  7. 39281        Running        8               
  8. 39282        Running        8               
  9. 41130        Running        8

  10.    xxx xxx xxx xxx
  11.     xxx xxx xxx xxx


  12. Record B--------------------               
  13. ID                STATE        Num

  14. 421121        Running        41               
  15. 421751        Running        81               
  16. 388971        Running        11               
  17. 392791        Running        81               
  18. 392811        Running        81               

  19.    xxx xxx xxx xxx
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2012-09-07 13:13 |只看该作者
回复 1# psfan

how about this

# awk '/^Record /{if(r)print r,s;s=0;gsub("-","",$2);r=$1" "$2}/Running/{s+=$3}END{print r,s}' LOG
Record A 45
Record B 295

   

论坛徽章:
0
3 [报告]
发表于 2012-09-07 13:51 |只看该作者
本帖最后由 psfan 于 2012-09-07 14:34 编辑
jason680 发表于 2012-09-07 13:13
回复 1# psfan

how about this



牛人就是牛人。困扰几天的问题一条命令搞定。
学习下:
awk '/^Record /{if(r)print r,s;s=0;gsub("-","",$2);r=$1" "$2}/Running/{s+=$3}END{print r,s}' LOG

^Record /{if(r)print r,s;s=0;gsub("-","",$2);r=$1" "$2}
是第一段,意思是一旦找到以Record开头的一行就输出变量r,s,其中s赋初始值为0以便累加,r赋值字符串$1空格$2,其中$2内容中把-号删除。
Running/{s+=$3}
是第二段,一旦找到含有Running的一行就给变量s加上$3中的数字。
END{print r,s}
是第三段,输出字串r和累加和s。

不知是否理解有误。请指教。

论坛徽章:
0
4 [报告]
发表于 2012-09-07 16:01 |只看该作者
没明白这里gsub("-","",$2)

论坛徽章:
0
5 [报告]
发表于 2012-09-07 17:22 |只看该作者
明白了,学习到好多,呵呵

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
6 [报告]
发表于 2014-05-15 17:31 |只看该作者
本帖最后由 dn833 于 2014-05-15 17:31 编辑
  1. awk 'BEGIN{RS="Record";FS="\n|[ ]+"}NR>1{gsub(/-/,"",$2);for(i=1;i<=NF;i++)if($i~/Running/)S=S+$(i+1);print RS,$2,S}'
复制代码

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
7 [报告]
发表于 2014-05-16 12:58 |只看该作者
挖坟么?
/Record/的时候gsub替换把Record当做key,匹配Running的时候
a[key]+=$NF

END打印即可。

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
8 [报告]
发表于 2014-05-16 13:35 |只看该作者
回复 6# dn833

没想到你也会挖坟~
   

论坛徽章:
2
IT运维版块每日发帖之星
日期:2015-12-26 06:20:00IT运维版块每周发帖之星
日期:2016-02-03 16:51:55
9 [报告]
发表于 2015-05-14 10:41 |只看该作者
好多看不懂,真心是菜鸟一个只。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
10 [报告]
发表于 2015-05-14 17:44 |只看该作者
回复 9# 少林功夫好

CU多载 多习基础
   
awk初学之常见问题
http://bbs.chinaunix.net/thread-2309494-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP