我在一个非常大的日志文件(例如A.log)中描述了一个事件的多个条目。我想对日志文件中的事件条目做两件事:
- 计算每个此类条目的出现次数(这不是强制性要求,但是很高兴拥有)。
- 将实际条目提取到一个单独的文件中,并在以后进行研究。
典型的事件条目如下所示,并且它们之间还会有其他文本。因此,在下面的示例中,有两个事件条目,第一个包含两个DataChangeEntry
有效负载,第二个包含一个DataChangeEntry
有效负载。
Data control raising event :DataControl@263c015d[[
#### DataChangeEvent #### on [DataControl name=PatternMatch_LegendTimeAxis, binding=.dynamicRegion1. beam_project_PatternMatch_dashboard_LegendTimeAxis_taskflow_LegendTimeAxis_beamDashboardLegendTimeAxisPageDef_beam_project_PatternMatch_dashboard_LegendTimeAxis_taskflow_LegendTimeAxis_beamDashboardLegendTimeAxis_xml_ps_taskflowid.dynamicRegion58. beam_project_PatternMatch_view_LegendTimeAxis_taskflow_LegendTimeAxis_beamVizLegendTimeAxisPageDef_beam_project_PatternMatch_view_LegendTimeAxis_taskflow_LegendTimeAxis_beamVizLegendTimeAxis_xml_ps_taskflowid.QueryIterator]
Filter/Collection Id : 0
Collection Level : 0
Sequence Id : 616
ViewSetId : PatternMatch.LegendTimeAxis_V1_0_SN49
==== DataChangeEntry (#1)
ChangeType : UPDATE
KeyPath : [2014-06-26 06:15:00.0, 0]
AttributeNames : [DATAOBJECT_CREATED, COUNTX, QueryName]
AttributeValues : [2014-06-26 06:15:00.0, 11, StrAvgCallWaitTimeGreaterThanThreshold]
AttributeTypes : [java.sql.Timestamp, java.lang.Integer, java.lang.String, ]
==== DataChangeEntry (#2)
ChangeType : UPDATE
KeyPath : [2014-06-26 06:15:00.0, 0]
AttributeNames : [DATAOBJECT_CREATED, COUNTX, QueryName]
AttributeValues : [2014-06-26 06:15:00.0, 9, AverageCallWaitingTimeGreateThanThreshold]
AttributeTypes : [java.sql.Timestamp, java.lang.Integer, java.lang.String, ]
]]
someother non useful text
spanning multiple lines
Data control raising event :DataControl@263c015d[[
#### DataChangeEvent #### on [DataControl name=PatternMatch_LegendTimeAxis, binding=.dynamicRegion1. beam_project_PatternMatch_dashboard_LegendTimeAxis_taskflow_LegendTimeAxis_beamDashboardLegendTimeAxisPageDef_beam_project_PatternMatch_dashboard_LegendTimeAxis_taskflow_LegendTimeAxis_beamDashboardLegendTimeAxis_xml_ps_taskflowid.dynamicRegion58. beam_project_PatternMatch_view_LegendTimeAxis_taskflow_LegendTimeAxis_beamVizLegendTimeAxisPageDef_beam_project_PatternMatch_view_LegendTimeAxis_taskflow_LegendTimeAxis_beamVizLegendTimeAxis_xml_ps_taskflowid.QueryIterator]
Filter/Collection Id : 0
Collection Level : 0
Sequence Id : 616
ViewSetId : PatternMatch.LegendTimeAxis_V1_0_SN49
==== DataChangeEntry (#1)
ChangeType : UPDATE
KeyPath : [2014-06-26 06:15:00.0, 0]
AttributeNames : [DATAOBJECT_CREATED, COUNTX, QueryName]
AttributeValues : [2014-06-26 06:15:00.0, 11, StrAvgCallWaitTimeGreaterThanThreshold]
AttributeTypes : [java.sql.Timestamp, java.lang.Integer, java.lang.String, ]
]]
请注意,==== DataChangeEntry
事件条目中的行数 可以变化。也可能完全不存在,这将指示空事件有效负载,并且是错误情况,并且肯定也想抓住这种情况。
由于在这种情况下,条目的输出跨多行,因此使用普通香草grep并不会太远。因此,我正在寻求专家意见。
PS:
- 让我更明确地说明我的要求。我想逐字捕获上面显示的整个文本块,并可以选择计算遇到的此类块的实例数。计算实例数量的选项很好,但不是强制性要求。
- 如果问题的解决方案是使用awk,我想保存awk文件并重新使用它。因此,请同时提及执行脚本的步骤。我知道regex和grep,但对sed和/或awk不熟悉。
@LatinSuD是的,它始终以该字符串开头。
—
极客
我认为这是awk的工作,使用“状态机”变量,但是您应该添加一些更多信息以获取帮助,例如搜索的确切令牌以及您期望的最终结果。
—
Didi Kohen
@DavidKohen 事件条目以“数据控件引发事件”标记开头,并以新行结尾的“]]”结束。我想找出每个这样的事件实例。
—
极客
找到他们呢?算他们的数量?全部打印吗?请编辑您的问题并添加示例预期输出(最好使用不同的示例输入)。
—
Didi Kohen 2014年
Data control raising event
吗?