免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk取字段 向大侠请教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-24 09:28 |只看该作者 |正序浏览
数据如下:
17:40:10:416315  [end task]:dispId:9,taskID:201,rowLen:100,shouldRowNum:6,actualRowNum:6,todayRowNum:1950,lastBeginTime:10-23_17:40:09:8482,lastEndTime:10-23_17:40:09:9722
17:40:11:428225  [end task]:dispId:6,taskID:241,rowLen:111,shouldRowNum:6,actualRowNum:6,todayRowNum:11700,lastBeginTime:10-23_17:40:09:6973,lastEndTime:10-23_17:40:09:8265
17:40:11:428361  [end task]:dispId:6,taskID:261,rowLen:111,shouldRowNum:14,actualRowNum:14,todayRowNum:27300,lastBeginTime:10-23_17:40:10:4717,lastEndTime:10-23_17:40:10:4978
17:40:16:483620  [end task]:dispId:6,taskID:241,rowLen:111,shouldRowNum:6,actualRowNum:6,todayRowNum:11706,lastBeginTime:10-23_17:40:14:5411,lastEndTime:10-23_17:40:14:5794
17:40:16:483740  [end task]:dispId:6,taskID:261,rowLen:111,shouldRowNum:14,actualRowNum:14,todayRowNum:27314,lastBeginTime:10-23_17:40:15:5334,lastEndTime:10-23_17:40:15:5813
17:40:16:483797  [end task]:dispId:7,taskID:181,rowLen:54,shouldRowNum:5,actualRowNum:5,todayRowNum:8130,lastBeginTime:10-23_17:40:15:6233,lastEndTime:10-23_17:40:15:7306

要取每行rowLen:后面的数字和todayRowNum:后的数字 请赐教!

论坛徽章:
0
19 [报告]
发表于 2013-10-26 11:22 |只看该作者
回复 18# jason680




    也就是说a[0]存的是正则表达式整个匹配字符串的值,a[1], a[2]存的是()内限定的匹配值 可以这样理解吗

论坛徽章:
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
18 [报告]
发表于 2013-10-25 17:54 |只看该作者
回复 17# ys547007

http://www.gnu.org/software/gawk/manual/gawk.html#String-Functions

# echo 123foooobazbarrrrr123 | awk '{ match($0, /(fo+).+(bar*)/, a)
print "[0]="a[0] " [1]="a[1] " [2]="a[2]
print "0 Start=" a[0,"start"] ", Len="a[0,"length"]
print "1 Start=" a[1,"start"] ", Len="a[1,"length"]
print "2 Start=" a[2,"start"] ", Len="a[2,"length"]
}'
[0]=foooobazbarrrrr [1]=foooo [2]=barrrrr
0 Start=4, Len=15
1 Start=4, Len=5
2 Start=12, Len=7

   

论坛徽章:
0
17 [报告]
发表于 2013-10-25 17:37 |只看该作者
回复 10# jason680

#tail ssync_20131025.log |grep "end task" |awk 'function get_val(k){if(match($0,k"[^,]+)",a))return a[1]}{r=get_val("rowLen";t=get_val("actualRowNum";print r,t}'
100 6
111 6
111 14
111 6
111 14
#tail ssync_20131025.log |grep "end task" |awk 'function get_val(k){if(match($0,k"[^,]+)",a))return a[0]}{r=get_val("rowLen";t=get_val("actualRowNum";print r,t}'
rowLen:100 actualRowNum:6
rowLen:111 actualRowNum:6
rowLen:111 actualRowNum:14
rowLen:111 actualRowNum:6
rowLen:111 actualRowNum:14
敢问大神 数组a存值是怎么个存法 a[0]得到的是rowLen:100 actualRowNum:6 而a[1]就只是数字 100 6

论坛徽章:
14
15-16赛季CBA联赛之辽宁
日期:2019-06-16 15:47:3515-16赛季CBA联赛之广夏
日期:2016-08-13 21:24:352015亚冠之武里南联
日期:2015-07-07 17:37:372015亚冠之萨济拖拉机
日期:2015-07-06 17:07:482015亚冠之全北现代
日期:2015-06-04 13:54:272015亚冠之城南
日期:2015-05-21 15:43:212015年亚洲杯之伊朗
日期:2015-04-25 18:20:362015年亚洲杯之伊朗
日期:2015-04-20 16:06:052015年亚洲杯之科威特
日期:2015-03-07 12:51:26丑牛
日期:2014-12-30 10:26:38申猴
日期:2014-09-28 22:40:18金牛座
日期:2014-09-13 21:12:22
16 [报告]
发表于 2013-10-24 15:50 |只看该作者
grep  -oP '(?<='rowLen:')\d+|(?<='todayRowNum:')\d+' a.txt |sed 'N;s/\n/ /g'

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
15 [报告]
发表于 2013-10-24 14:59 |只看该作者
awk 'BEGIN{FS="rowLentodayRowNum:"}{printf("%d\t%d\n", +$2, +$3)}'  file

论坛徽章:
36
摩羯座
日期:2013-09-23 16:37:312015年亚洲杯之沙特阿拉伯
日期:2015-04-14 09:10:172015亚冠之柏太阳神
日期:2015-06-25 08:48:212015亚冠之武里南联
日期:2015-07-28 09:01:082015亚冠之莱赫维亚
日期:2015-07-28 15:44:172015亚冠之柏斯波利斯
日期:2015-09-06 14:08:52白银圣斗士
日期:2015-11-25 17:06:2815-16赛季CBA联赛之吉林
日期:2015-12-09 16:59:072016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之辽宁
日期:2016-04-14 09:29:04luobin
日期:2016-06-17 17:46:3615-16赛季CBA联赛之天津
日期:2016-08-16 14:11:01
14 [报告]
发表于 2013-10-24 14:17 |只看该作者
回复 12# wang390750
3楼的方法,你看看,遇到关键词的时候才进行处理,不论你怎么增加和减少,只要有关键词就可以抓取出来!

   

论坛徽章:
0
13 [报告]
发表于 2013-10-24 11:58 |只看该作者
谢谢各位大牛  问题已解决

论坛徽章:
0
12 [报告]
发表于 2013-10-24 11:57 |只看该作者
回复 9# LikeLx


    我也在考虑这个问题。。
现在有个问题请教一下  awk -F "[ \t,:]+" '/rowLen/ && /todayRowNum/{print $12,$18}' 1
如何替换$12 和 $18呢。

论坛徽章:
7
卯兔
日期:2013-10-24 22:27:29天秤座
日期:2013-11-06 17:30:47午马
日期:2015-01-16 10:16:252015年亚洲杯之乌兹别克斯坦
日期:2015-04-02 14:49:302015年亚洲杯之韩国
日期:2015-04-22 14:28:03青铜圣斗士
日期:2015-11-21 00:06:2915-16赛季CBA联赛之天津
日期:2016-02-29 16:26:43
11 [报告]
发表于 2013-10-24 11:48 |只看该作者
顶一个不错,回复 7# trdcaz


   
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP