免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7147 | 回复: 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
复制代码

论坛徽章:
9
射手座
日期:2014-07-29 13:05:07双子座
日期:2015-01-11 17:01:522015年亚洲杯之朝鲜
日期:2015-02-01 16:14:282015亚冠之阿尔艾因
日期:2015-06-04 17:54:40数据库技术版块每日发帖之星
日期:2015-08-02 06:20:00数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-11-26 06:20:0015-16赛季CBA联赛之天津
日期:2016-06-20 17:09:2015-16赛季CBA联赛之青岛
日期:2017-02-26 15:54:19
13 [报告]
发表于 2015-05-20 10:57 |只看该作者
回复 3# psfan
看了两遍,应该是第二次匹配到Record的时候输出第一段的 Record A 45,END输出最后一段的 Record B ....

   

论坛徽章:
2
IT运维版块每日发帖之星
日期:2015-12-26 06:20:00IT运维版块每周发帖之星
日期:2016-02-03 16:51:55
12 [报告]
发表于 2015-05-20 10:18 |只看该作者
回复 10# jason680


    嗯,谢谢提供链接。

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
11 [报告]
发表于 2015-05-18 17:48 |只看该作者
  1. awk -vRS="Record [a-zA-Z][-]+" -F"\n" '{if(NF<4)next;for(i=4; i<=NF; i++){if($i=="")break;split($i, arr, " ");sum+=arr[3]}print sum}'   
  2. 45
  3. 340
复制代码
回复 1# psfan


   

论坛徽章:
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

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

论坛徽章:
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

没想到你也会挖坟~
   

论坛徽章:
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打印即可。

论坛徽章:
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}'
复制代码

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

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP