免费注册 查看新帖 |

Chinaunix

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

[文本处理] 一个awk的正则表达式格式的分隔符问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-12-14 14:14 |只看该作者 |倒序浏览
有一个文本文件,是用下面格式的字符串作为分割符,获得分隔符以及整个分隔符之后的内容。
由于这种分隔符的内容不是固定的,但其格式是固定的。
[1-124.5081]
[1-124.5082]
[1-124.5083]

假设有下面的文本内容需要处理,假设文件为cc.txt。
  1. [11-25 05:01:12.208]     Left [virtual CWFDStateP2PActivating::~CWFDS[1-124.5081] 10a0: e59f30a0 e08f3003 e5933000 e5933000 e3530000 0a00001b e59f108c e1a02007
  2. [11-25 05:01:12.228]     SMDebug.h: FSM(92) >         Entered [CWFDMa[1-124.5081] 10c0: e1cd40f4 e58d6000 e1a00008 e08f1001 ebffe6ba eaffffd0 e59f3070 e08f3003
  3. [11-25 05:01:12.250]     e<CWFDMainStateP2PActivated, CWFDMainStateWirelessAttached, CSMStateP2PDiscovering>::my_context)]
  4. [11-25 05:01:12.258]     W WFD_ASM : SMDebug.h: SM([1-124.5081] 10e0: e5933000 e5932000 e3520000 0a000010 e59f105c e1a03006 e58d5004 e1a00008
复制代码
由于分隔符的内容是变化的,我采用正则表达式来表示我的分隔符。
我目前获得分隔符之后的内容的方式如下。
  1. zxin10@steven:~/temp3$ cat cc.txt |  awk -F '\\[1-[0-9]+.[0-9]+\\] ' '{if(NF > 1 && length($2) > 5 )print $2}' | sed 's/^[ \t]*//g'
  2. 10a0: e59f30a0 e08f3003 e5933000 e5933000 e3530000 0a00001b e59f108c e1a02007
  3. 10c0: e1cd40f4 e58d6000 e1a00008 e08f1001 ebffe6ba eaffffd0 e59f3070 e08f3003
  4. 10e0: e5933000 e5932000 e3520000 0a000010 e59f105c e1a03006 e58d5004 e1a00008
复制代码
但我想打印出分隔符以及分隔符之后的内容,也就是下面这种内容。
  1. [1-124.5081] 10a0: e59f30a0 e08f3003 e5933000 e5933000 e3530000 0a00001b e59f108c e1a02007
  2. [1-124.5082] 10c0: e1cd40f4 e58d6000 e1a00008 e08f1001 ebffe6ba eaffffd0 e59f3070 e08f3003
  3. [1-124.5083] 10e0: e5933000 e5932000 e3520000 0a000010 e59f105c e1a03006 e58d5004 e1a00008
复制代码
请各位大神指导我如何处理,多谢啦  

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
2 [报告]
发表于 2015-12-14 14:43 |只看该作者
  1. awk '{if(match($0,"(\\[1-[0-9]+.[0-9]+\\].*)",a)) print a[1]}' file
复制代码
回复 1# junhengwoo


   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-12-17 06:20:00
3 [报告]
发表于 2015-12-14 14:55 |只看该作者
cat cc.txt |  awk  '/\[1-[0-9]+.[0-9]+\]/{print substr($0,match( $0, /\[1-[0-9]+.[0-9]+\]/ ))}'

论坛徽章:
12
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00程序设计版块每日发帖之星
日期:2016-01-19 06:20:0015-16赛季CBA联赛之江苏
日期:2016-01-17 15:31:3915-16赛季CBA联赛之上海
日期:2016-01-16 15:44:3015-16赛季CBA联赛之浙江
日期:2016-01-15 20:38:1815-16赛季CBA联赛之北京
日期:2016-01-09 14:30:15CU十四周年纪念徽章
日期:2016-01-07 12:31:5115-16赛季CBA联赛之四川
日期:2016-01-01 11:49:1515-16赛季CBA联赛之深圳
日期:2015-12-24 14:23:4115-16赛季CBA联赛之山西
日期:2015-12-15 16:22:31技术图书徽章
日期:2015-12-10 17:41:0015-16赛季CBA联赛之北控
日期:2016-02-03 10:03:24
4 [报告]
发表于 2015-12-14 14:58 |只看该作者
本帖最后由 sync_1521 于 2015-12-14 15:00 编辑

grep -oP "\[1-[0-9]+.[0-9]+].{5,}" file

论坛徽章:
0
5 [报告]
发表于 2015-12-14 15:24 |只看该作者
这个执行报错了  

zxin10@steven:~/temp3$ awk '{if(match($0,"(\\[1-[0-9]+.[0-9]+\\].*)",a)) print a[1]}' cc.txt
awk: line 1: syntax error at or near

回复 2# zxy877298415


   

论坛徽章:
0
6 [报告]
发表于 2015-12-14 16:24 |只看该作者
经测试,是可行的。
多谢   

vagrant_1220 发表于 2015-12-14 14:55
cat cc.txt |  awk  '/\[1-[0-9]+.[0-9]+\]/{print substr($0,match( $0, /\[1-[0-9]+.[0-9]+\]/ ))}'

论坛徽章:
0
7 [报告]
发表于 2015-12-14 16:43 |只看该作者
经测试,是可行的  多谢   

对这种解决方法,我有些不太明白。

前面的“\[1-[0-9]+.[0-9]+]”我明白是正则表达式,但后面紧跟着的“.{5,} ”我就不明白是什么意思了,能否帮忙解释下呢?


sync_1521 发表于 2015-12-14 14:58
grep -oP "\[1-[0-9]+.[0-9]+].{5,}" file

论坛徽章:
1
技术图书徽章
日期:2016-02-03 16:35:25
8 [报告]
发表于 2015-12-14 17:37 |只看该作者
$ sed  -r 's/.*(\[1-[0-9]+.[0-9]+\].*)/\1/' cu.test
[1-124.5081] 10a0: e59f30a0 e08f3003 e5933000 e5933000 e3530000 0a00001b e59f108c e1a02007
[1-124.5081] 10c0: e1cd40f4 e58d6000 e1a00008 e08f1001 ebffe6ba eaffffd0 e59f3070 e08f3003
[11-25 05:01:12.250]     e<CWFDMainStateP2PActivated, CWFDMainStateWirelessAttached, CSMStateP2PDiscovering>::my_context)]
[1-124.5081] 10e0: e5933000 e5932000 e3520000 0a000010 e59f105c e1a03006 e58d5004 e1a00008

不知道为什么出来了第三行,求大神解答一下

QQ图片20151214172723.png (14.65 KB, 下载次数: 38)

QQ图片20151214172723.png

论坛徽章:
1
技术图书徽章
日期:2016-02-03 16:35:25
9 [报告]
发表于 2015-12-14 17:51 |只看该作者
grep -oP "\[[0-9]-[0-9]{3}.[0-9]{4}\].*"

论坛徽章:
12
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00程序设计版块每日发帖之星
日期:2016-01-19 06:20:0015-16赛季CBA联赛之江苏
日期:2016-01-17 15:31:3915-16赛季CBA联赛之上海
日期:2016-01-16 15:44:3015-16赛季CBA联赛之浙江
日期:2016-01-15 20:38:1815-16赛季CBA联赛之北京
日期:2016-01-09 14:30:15CU十四周年纪念徽章
日期:2016-01-07 12:31:5115-16赛季CBA联赛之四川
日期:2016-01-01 11:49:1515-16赛季CBA联赛之深圳
日期:2015-12-24 14:23:4115-16赛季CBA联赛之山西
日期:2015-12-15 16:22:31技术图书徽章
日期:2015-12-10 17:41:0015-16赛季CBA联赛之北控
日期:2016-02-03 10:03:24
10 [报告]
发表于 2015-12-14 18:30 |只看该作者
回复 7# junhengwoo

相当于你条件里的 length($2) >= 5


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP