免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1213 | 回复: 9

[文本处理] 处理日志 [复制链接]

论坛徽章:
0
发表于 2017-11-08 19:01 |显示全部楼层
本帖最后由 我是个读书人丶 于 2017-11-09 10:33 编辑

[29/Sep/2017:23:59:59 +0800]|GET /tv_api/api/?Action=EPGEntrance&address=&APIVersion=2.2.0&Type=android_tv&RightId=00
[29/Sep/2017:23:59:59 +0800]|GET /tv_api/api/?Action=EPGEntrance&address=&APIVersion=2.2.0&Type=android_tv&cmd=get_config&RightId=00
[29/Sep/2017:23:59:59 +0800]|GET /api/api/?Action=EPGEntrance&address=&APIVersion=2.2.0&Type=android_tv&cmd=get_epg&RightId=00
[29/Sep/2017:23:59:59 +0800]|GET /tv_api/api/?APIVersion=2.2.0&Action=EPGEntrance&address=&Type=android_tv&RightId=00
[29/Sep/2017:23:59:59 +0800]|GET /tv_api/api/?address=&APIVersion=2.2.0&Type=android_tv&Action=EPGEntrance&cmd=get&RightId=00
[29/Sep/2017:23:59:59 +0800]|GET /tv_api/plugisu/?Action=EPGEntrance&address=&APIVersion=2.2.0&Type=android_tv&cmd=get_config&RightId=00
[29/Sep/2017:23:59:59 +0800]|GET /tv_api/api/?Type=android_tv&Action=EPGEntrance&address=&APIVersion=2.2.0&cmd=get_config&RightId=00
[29/Sep/2017:23:59:59 +0800]|GET /tv_api/api/?Action=DDEFC&address=&APIVersion=2.2.0&Type=android_tv&RightId=00
[29/Sep/2017:23:59:59 +0800]|GET /tv_api/api/?Action=EPGEntrance&address=&APIVersion=2.2.0&Type=android_tv&cmd=get_config&RightId=00
[29/Sep/2017:23:59:59 +0800]|GET /tv_api/api/?Action=EPGEntrance&address=&APIVersion=2.2.0&Type=android_tv&RightId=00
[29/Sep/2017:23:59:59 +0800]|GET /tv_api/api/?Action=EPGEntrance&address=&APIVersion=2.2.0&Type=android_tv&cmd=get_config&RightId=00
[29/Sep/2017:23:59:59 +0800]|GET /tv_api/api/?APIVersion=2.2.0&Action=EPGEntrance&address=&Type=android_tv&cmd=get_add&RightId=00
[29/Sep/2017:23:59:59 +0800]|GET /tv_api/api/?Action=EPGEntrance&address=&APIVersion=2.2.0&Type=android_tv&cmd=get_config&RightId=00
[29/Sep/2017:23:59:59 +0800]|GET /tv_api/api/?Action=EPGEntrance&address=&APIVersion=2.2.0&Type=android_tv&cmd=get_gcc&RightId=00
[29/Sep/2017:23:59:59 +0800]|GET /tv_api/api/?Type=android_tv&Action=EPGEntrance&address=&APIVersion=2.2.0&RightId=00

如以上日志, 求只过滤出带有  接口|Action=的值|cmd=的值,如果日志里没有cmd,那就是cmd=
最后处理日志的结果是如下这样的:
/tv_api/api/|Action=EPGEntrance|cmd=get_config
/tv_api/api/|Action=DDEFC|cmd=
/tv_api/plugisu/|Action=EPGEntrance|cmd=get_config
/api/api/Action=EPGEntrance|cmd=get_epg
......
日志的格式有点乱,Action与cmd字段不在同一列。所以不太会用awk进行过滤。awk过滤或者使用更好的方法。求各位大神帮忙。谢谢!



论坛徽章:
0
发表于 2017-11-09 15:41 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-10-11 06:20:0015-16赛季CBA联赛之山东
日期:2016-05-28 18:18:5615-16赛季CBA联赛之新疆
日期:2017-04-12 22:55:4715-16赛季CBA联赛之青岛
日期:2017-06-26 18:30:0315-16赛季CBA联赛之四川
日期:2017-09-04 12:27:0315-16赛季CBA联赛之福建
日期:2018-02-09 14:28:3315-16赛季CBA联赛之同曦
日期:2018-04-17 12:43:3415-16赛季CBA联赛之浙江
日期:2018-07-14 13:27:4015-16赛季CBA联赛之吉林
日期:2018-09-13 15:48:2915-16赛季CBA联赛之新疆
日期:2016-05-07 05:05:3215-16赛季CBA联赛之八一
日期:2016-03-14 12:32:06程序设计版块每日发帖之星
日期:2015-12-12 06:20:00
发表于 2017-11-09 15:41 |显示全部楼层
  1. # awk -F '[ ?]' '{match($0,/Action=[^&]+/,a);match($0,/cmd=[^&]+/,b);print $3,a[0],b[0]==""?"cwd=":b[0]}' OFS="|" file  
  2. /tv_api/api/|Action=EPGEntrance|cwd=
  3. /tv_api/api/|Action=EPGEntrance|cmd=get_config
  4. /api/api/|Action=EPGEntrance|cmd=get_epg
  5. /tv_api/api/|Action=EPGEntrance|cwd=
  6. /tv_api/api/|Action=EPGEntrance|cmd=get
  7. /tv_api/plugisu/|Action=EPGEntrance|cmd=get_config
  8. /tv_api/api/|Action=EPGEntrance|cmd=get_config
  9. /tv_api/api/|Action=DDEFC|cwd=
  10. /tv_api/api/|Action=EPGEntrance|cmd=get_config
  11. /tv_api/api/|Action=EPGEntrance|cwd=
  12. /tv_api/api/|Action=EPGEntrance|cmd=get_config
  13. /tv_api/api/|Action=EPGEntrance|cmd=get_add
  14. /tv_api/api/|Action=EPGEntrance|cmd=get_config
  15. /tv_api/api/|Action=EPGEntrance|cmd=get_gcc
  16. /tv_api/api/|Action=EPGEntrance|cwd=
复制代码

论坛徽章:
0
发表于 2017-11-09 15:53 |显示全部楼层
回复 2# 本友会机友会摄友会

谢谢。现在着急要用这个。所以,还是考虑使用awk之类的处理方法。谢谢!

论坛徽章:
0
发表于 2017-11-09 15:53 |显示全部楼层
回复 3# baby_神

谢谢大神。我用这个试试看看能不能对应我的所有的日志。谢谢。

论坛徽章:
0
发表于 2017-11-09 15:57 |显示全部楼层
本帖最后由 我是个读书人丶 于 2017-11-09 15:59 编辑

回复 3# baby_神

可以用。谢谢

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-10-11 06:20:0015-16赛季CBA联赛之山东
日期:2016-05-28 18:18:5615-16赛季CBA联赛之新疆
日期:2017-04-12 22:55:4715-16赛季CBA联赛之青岛
日期:2017-06-26 18:30:0315-16赛季CBA联赛之四川
日期:2017-09-04 12:27:0315-16赛季CBA联赛之福建
日期:2018-02-09 14:28:3315-16赛季CBA联赛之同曦
日期:2018-04-17 12:43:3415-16赛季CBA联赛之浙江
日期:2018-07-14 13:27:4015-16赛季CBA联赛之吉林
日期:2018-09-13 15:48:2915-16赛季CBA联赛之新疆
日期:2016-05-07 05:05:3215-16赛季CBA联赛之八一
日期:2016-03-14 12:32:06程序设计版块每日发帖之星
日期:2015-12-12 06:20:00
发表于 2017-11-09 15:58 |显示全部楼层
回复 6# 我是个读书人丶

是不要POST?

论坛徽章:
0
发表于 2017-11-09 16:04 |显示全部楼层
回复 7# baby_神

可以。刚刚试了一下。单独拿了一条
[29/Sep/2017:23:59:59 +0800]|POST /cards_api/api HTTP/1.1|200|111|-|Dalvik/1.6.0 (Linux; U; Android 4.0.3; IP506H_54U3 Build/IML74K)|-|Action=log&address=&APIVersion=2.2.0&cmd=intranet_data&copyRightId=26
这样的日志

也可以输出
/cards_api/api|Action=log|cmd=intranet_data

像这样的结果。

非常感谢。 能否讲解一下。awk真的太深了,只学了点基础完全不够用啊。

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-10-11 06:20:0015-16赛季CBA联赛之山东
日期:2016-05-28 18:18:5615-16赛季CBA联赛之新疆
日期:2017-04-12 22:55:4715-16赛季CBA联赛之青岛
日期:2017-06-26 18:30:0315-16赛季CBA联赛之四川
日期:2017-09-04 12:27:0315-16赛季CBA联赛之福建
日期:2018-02-09 14:28:3315-16赛季CBA联赛之同曦
日期:2018-04-17 12:43:3415-16赛季CBA联赛之浙江
日期:2018-07-14 13:27:4015-16赛季CBA联赛之吉林
日期:2018-09-13 15:48:2915-16赛季CBA联赛之新疆
日期:2016-05-07 05:05:3215-16赛季CBA联赛之八一
日期:2016-03-14 12:32:06程序设计版块每日发帖之星
日期:2015-12-12 06:20:00
发表于 2017-11-09 16:40 |显示全部楼层
回复 8# 我是个读书人丶

前面的match函数没什么好讲的,百度一下好多讲match的
后面的b[0]==""?"cwd=":b[0]  用的是三目运算符  ? :   
意思就是 如果 b[0] 等于空,就是cwd= ,否则 还是b[0]  , if(b[0]=="") {print "cwd="} else {print b[0]}

OFS="|"  这个是输出分隔符,默认是空格


可以加群 219636001,共同学习,共同探讨

论坛徽章:
0
发表于 2017-11-15 18:20 |显示全部楼层
回复 9# baby_神

谢谢大神!学习了。非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP