Ik heb een bestand dat wordt 20 tot 80 + MB groot is dat een bepaalde soort van log bestand.
Het logs een van onze processen en dit proces is multi-threaded. Daarom is de log-bestand is een soort van een puinhoop. Hier is een voorbeeld:
De logfile ziet er als volgt: "Datum Tijd - Thread ID - Details", en een nieuw bestand wordt aangemaakt voor elke dag
Citaat:
20090409 000122 - BD0 - Bestel 123 sessie beginnen
20090409 000122 - BD0 - Verwerking 1
20090409 000122 - BD0 - Meer Verwerking
20090409 000123 - EF0 - Bestel 234 sessie beginnen
20090409 000124 - EF0 - Verwerking
20090409 000124 - BD0 - Verwerking 2
20090409 000125 - BD0 - Meer Verwerking
20090409 000125 - EF0 - Verwerking
20090409 000125 - DD1 - Cancel 345 sessie beginnen
20090409 000125 - DD1 - Verwerking
20090409 000126 - DD1 - Verwerking 2
20090409 000126 - BD0 - Bestel 123 afgesloten
20090409 000127 - 11F - Query 543 sessie beginnen
20090409 000127 - 11F - Verwerking
..
..
20090409 000135 - 11F - Query 543 afgesloten
..
20090409 000140 - EF0 - Bestel 234 afgesloten
..
..
..
20090409 000143 - DD1 - 345 stijl afsluiten
|
Nu, hier is waar het wordt om een pijn ... Ik moet trek de lijnen van "Starting Session" in "Einde Sessie" voor elke Thread-ID, en deze naar de afzonderlijke bestanden dumpen. ECHTER, de Thread ID kan gedupliceerd in de loop van een dag - maar meestal niet voor vele uren.
Een sessie kan duren van 30 seconden tot 4 minuten of zo (~ 1200 lijnen) in de logfile, en er kan maximaal 20 gelijktijdige sessies.
Nu heb ik iets dat werkt - hoewel heel langzaam. Ik eindigen Grepping en sedding het dossier over en voorbij. Wanneer het bestand wordt groot, duurt het een enorme hoeveelheid en tijd. Ik hoop dat iemand hier me kan helpen dit te optimaliseren. Indien mogelijk, zou ik willen gebruiken bash.
Bedankt,
Eric
Hier is de code die ik heb die werkt, maar is _slow_
Code:
if [[ -e "$log_file" ]]
then
echo "parsing: "$log_file
grep "starting session" $log_file | while read line
do
thread=`echo $line | cut -d' ' -f4`
sessiontype=`echo $line | cut -d' ' -f6`
sessionnumber=`echo $line | cut -d' ' -f7`
echo " first line of session: "${line:0:25}"..."
line2=`echo - $thread - $sessiontype $sessionnumber shutting down`
echo " last line of session: "${line2:0:25}"..."
sed -n "/$line/,/$line2/p" $log_file | grep " - $thread - ">session.$thread.$sessiontype.$sessionnumber
done
....
Dit geeft mij een aantal bestanden, dat het gebruik van het voorbeeld hierboven log zou ontstaan zoals hieronder weergegeven:
Citaat:
file: session.BD0.Order.123
20090409 000122 - BD0 - Bestel 123 sessie beginnen
20090409 000122 - BD0 - Verwerking 1
20090409 000122 - BD0 - Meer Verwerking
20090409 000124 - BD0 - Verwerking 2
20090409 000125 - BD0 - Meer Verwerking
20090409 000126 - BD0 - Bestel 123 afgesloten
file: session.DD1.Cancel.345
20090409 000125 - DD1 - Cancel 345 sessie beginnen
20090409 000125 - DD1 - Verwerking
20090409 000126 - DD1 - Verwerking 2
..
..
..
20090409 000143 - DD1 - 345 stijl afsluiten
file: session.11F.Query.543
20090409 000127 - 11F - Query 543 sessie beginnen
20090409 000127 - 11F - Verwerking
..
..
20090409 000135 - 11F - Query 543 afgesloten
file: session.EF0.Order.234
20090409 000123 - EF0 - Bestel 234 sessie beginnen
20090409 000124 - EF0 - Verwerking
20090409 000125 - EF0 - Verwerking
20090409 000140 - EF0 - Bestel 234 afgesloten
|