Saya memiliki beberapa entri yang menjelaskan peristiwa dalam file log yang sangat besar, katakan A.log . Saya ingin melakukan dua hal dengan entri acara dalam file log:
- Hitung jumlah kemunculan setiap entri tersebut. (Ini bukan persyaratan wajib tapi akan menyenangkan untuk dimiliki.)
- Ekstrak entri aktual dalam file terpisah dan pelajari nanti.
Entri acara yang khas akan terlihat seperti berikut dan akan memiliki teks lain di antara mereka. Jadi, dalam contoh di bawah ini ada dua entri acara , yang pertama berisi dua DataChangeEntry
muatan dan yang kedua berisi satu DataChangeEntry
muatan.
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, ]
]]
Harap dicatat bahwa jumlah ==== DataChangeEntry
baris dalam entri acara dapat bervariasi. Itu juga bisa benar-benar tidak ada yang akan menunjukkan muatan acara kosong dan merupakan kondisi kesalahan dan pasti ingin menangkap kasus ini juga.
Karena dalam hal ini output dari entri membentang di beberapa baris saya tidak terlalu jauh menggunakan plain vanilla grep. Jadi saya mencari saran ahli.
PS:
- Biarkan saya lebih eksplisit tentang kebutuhan saya. Saya ingin menangkap seluruh blok teks yang ditunjukkan di atas kata demi kata dan secara opsional menghitung jumlah instance dari blok yang ditemui. Pilihan untuk menghitung jumlah instance adalah baik untuk dimiliki tetapi bukan persyaratan wajib.
- Jika solusi untuk masalah ini menggunakan awk, saya ingin menyimpan file awk dan menggunakannya kembali. Jadi tolong sebutkan langkah-langkah untuk menjalankan skrip juga. Saya tahu regex dan grep tetapi saya tidak terbiasa dengan sed dan / atau awk.
Data control raising event
?