Tôi có nhiều mục mô tả một sự kiện trong một tệp nhật ký rất lớn, nói A.log . Tôi muốn làm hai điều với các mục sự kiện trong tệp nhật ký:
- Đếm số lần xuất hiện của mỗi mục như vậy. (Đây không phải là một yêu cầu bắt buộc nhưng sẽ rất tốt để có.)
- Trích xuất các mục thực tế trong một tệp riêng biệt và nghiên cứu chúng sau này.
Một mục sự kiện thông thường sẽ trông giống như sau và sẽ có các văn bản khác giữa chúng. Vì vậy, trong ví dụ dưới đây có hai mục sự kiện , mục đầu tiên chứa hai DataChangeEntry
tải trọng và mục thứ hai chứa một DataChangeEntry
tải trọng.
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, ]
]]
Xin lưu ý rằng số lượng ==== DataChangeEntry
dòng trong một mục sự kiện có thể thay đổi. Nó cũng có thể hoàn toàn vắng mặt, điều này cho thấy trọng tải sự kiện trống và là một điều kiện lỗi và chắc chắn cũng muốn nắm bắt trường hợp này.
Vì trong trường hợp này, đầu ra của các mục nhập trải dài trên nhiều dòng, tôi sẽ không sử dụng vanilla grep đơn giản. Vì vậy, tôi đang tìm kiếm lời khuyên chuyên gia.
Tái bút
- Hãy để tôi rõ ràng hơn về yêu cầu của tôi. Tôi muốn chụp toàn bộ khối văn bản được hiển thị ở trên nguyên văn và tùy ý đếm số lượng phiên bản của các khối như vậy gặp phải. Tùy chọn để đếm số lượng phiên bản là tốt để có nhưng không phải là một yêu cầu bắt buộc.
- Nếu giải pháp cho vấn đề là sử dụng awk, tôi muốn lưu tệp awk và sử dụng lại. Vì vậy, xin vui lòng đề cập đến các bước để thực hiện các kịch bản cũng. Tôi biết regex và grep nhưng tôi không quen với sed và / hoặc awk.
Data control raising event
?