linux – 从unix中的.gz日志文件中提取值
发布时间:2020-12-14 00:05:18 所属栏目:Linux 来源:网络整理
导读:我试图从一堆基本上压缩的日志文件的.gz日志文件中提取一个特定的值(例如本例中的userAgent).这些日志文件中每个日志语句的格式如下所示: 2013-06-20;02:00:02.503 [664492205@qtp-446095113-8883]-Activity [response@12293 appId=testApp userAgent=Bundl
我试图从一堆基本上压缩的日志文件的.gz日志文件中提取一个特定的值(例如本例中的userAgent).这些日志文件中每个日志语句的格式如下所示:
2013-06-20;02:00:02.503 [664492205@qtp-446095113-8883]-Activity [response@12293 appId=testApp userAgent=BundleDeviceFamily/iPhone,iPad (iPad; iPad2,5; iPad2,5; iPhone OS 6.1.3) EXEC_TM=123 FLOW=response TOKN_TM=0 GW_TM=2314.529 http.status=200 id=029dde45-802c-462a-902b-138bc5490fba offeringId=iPad httpUrl= test.com AUD_TM=0 ipAddress=10.10.10.10 ] 2013-06-20;02:00:02.504 [664492205@qtp-446095113-8883]-Activity [response@12293 appId=testApp userAgent=FNetwork/609.1.4 Darwin/13.0.0 id=029dde45-802c-462a-902b-138bc5490fba EXEC_TM=123 FLOW=response TOKN_TM=0 GW_TM=2314.529 http.status=200 offeringId=iPad httpUrl= test.com AUD_TM=0 ipAddress=10.10.10.10 ] 在这种情况下,我想提取userAgent字段并以下列格式之一显示结果: userAgent=BundleDeviceFamily/iPhone,5; iPhone OS 6.1.3) userAgent=FNetwork/609.1.4 Darwin/13.0.0 等等.. 或者只打印以下值: BundleDeviceFamily/iPhone,5; iPhone OS 6.1.3) FNetwork/609.1.4 Darwin/13.0.0 编辑:只是为了添加更多信息,这些空格分隔的字段,如key1 = value1 key2 = value2可以按任何顺序出现 感谢帮助.谢谢! 解决方法
由于您提到key = value对可以按任何顺序出现,因此这是使用awk执行此操作的一种方法.
zcat input.gz | awk -F= ' { for(i=1;i<=NF;i++) { if($i~/userAgent/) { sub(/[^ ]+$/,"",$(i+1)) print "userAgent="$(i+1) } } }' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |