The UNIX and Linux Forums  


Go Back   UNIX og Linux Forums > Top Forums > Shell Programmering og Scripting
.
google unix.com



Shell Programmering og Scripting Post spørgsmål om ksh, CSH, SH, Bash, Perl, PHP, SED, AWK og ANDRE shell scripts og Shell scriptsprog her.

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
grep'ing en fil, indtil en vis vises pallak7 Shell Programmering og Scripting 3 04-23-2009 12:48 PM
grep'ing til bestemte mapper, og ved hjælp af produktion til at flytte filer JayC89 Shell Programmering og Scripting 1 12-06-2008 03:37 AM
Fremskynde en Shell Script (find, grep og en for loop) Dave Stockdale UNIX for dummyer Spørgsmål & svar 8 08-11-2008 05:36 AM
Hurtigere behandling af en fil dlam Shell Programmering og Scripting 4 07-19-2008 01:47 PM
fremskynde udarbejdelse på Sun Solaris miljø swamymns Shell Programmering og Scripting 2 07-12-2006 01:06 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Søg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 04-21-2009
elinenbe elinenbe is offline
Registreret Bruger
  
 

Join Date: Dec 2008
Stillinger: 8
Question grep'ing og sed'ing kødstykker i bash ... brug for hjælp til at fremskynde en log parser.

Jeg har en fil, der er 20 til 80 + MB i størrelse, der er en vis type af logfil.

Det logger en af vores processer, og denne proces er multi-threaded. Derfor er logfilen er lidt noget rod. Her er et eksempel:

Den logfil udseende: "DATO TID - THREAD ID - Detaljer", og en ny fil, der oprettes for hver dag
Citat:
20090409 000122 - BD0 - Bestil 123 starter session
20090409 000122 - BD0 - Forarbejdning 1
20090409 000122 - BD0 - Flere Processing
20090409 000123 - EF0 - Bestil 234 starter session
20090409 000124 - EF0 - Forarbejdning
20090409 000124 - BD0 - Forarbejdning 2
20090409 000125 - BD0 - Flere Processing
20090409 000125 - EF0 - Forarbejdning
20090409 000125 - DD1 - Annuller 345 starter session
20090409 000125 - DD1 - Forarbejdning
20090409 000126 - DD1 - Forarbejdning 2
20090409 000126 - BD0 - Bestil 123 lukke
20090409 000127 - 11F - Query 543 starter session
20090409 000127 - 11F - Forarbejdning
..
..
20090409 000135 - 11F - Query 543 lukke
..
20090409 000140 - EF0 - Bestil 234 lukke
..
..
..
20090409 000143 - DD1 - Annuller 345 lukke
Nu, her, hvor det bliver at være en smerte ... Jeg har brug for at trække linjer fra "Starting Session" til "Ending Session" for hver Tråd ID, og dump dem til separate filer. MEN, den Tråd ID kan blive gentaget i løbet af en dag - men normalt ikke i mange timer.

En session kan vare fra 30 sekunder til 4 minutter eller deromkring (~ 1200 linjer) i logfil, og der kan være op til 20 samtidige sessioner.

Nu har jeg noget, der virker - selv ganske langsomt. Jeg ender flerfilssøgning og sedding filen igen og igen. Når filen bliver store, det tager et kolossalt tid. Jeg håber, at nogen her kan hjælpe mig med at optimere denne. Hvis det er muligt, vil jeg gerne bruge bash.

Tak,
Eric

Her er den kode jeg har, der virker, men er _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
    ....

Det giver mig en række filer, der bruger eksemplet log ovenfor, vil blive skabt som vist nedenfor:
Citat:
file: session.BD0.Order.123
20090409 000122 - BD0 - Bestil 123 starter session
20090409 000122 - BD0 - Forarbejdning 1
20090409 000122 - BD0 - Flere Processing
20090409 000124 - BD0 - Forarbejdning 2
20090409 000125 - BD0 - Flere Processing
20090409 000126 - BD0 - Bestil 123 lukke

file: session.DD1.Cancel.345
20090409 000125 - DD1 - Annuller 345 starter session
20090409 000125 - DD1 - Forarbejdning
20090409 000126 - DD1 - Forarbejdning 2
..
..
..
20090409 000143 - DD1 - Annuller 345 lukke

file: session.11F.Query.543
20090409 000127 - 11F - Query 543 starter session
20090409 000127 - 11F - Forarbejdning
..
..
20090409 000135 - 11F - Query 543 lukke

file: session.EF0.Order.234
20090409 000123 - EF0 - Bestil 234 starter session
20090409 000124 - EF0 - Forarbejdning
20090409 000125 - EF0 - Forarbejdning
20090409 000140 - EF0 - Bestil 234 lukke
  #2 (permalink)  
Old 04-21-2009
Franklin52 Franklin52 is offline Forum Staff  
Moderator
  
 

Join Date: Feb 2007
Indlæg: 4.330
Hvis man antager den første linje i en session afsluttes med "start session", kan du prøve denne (ikke testet):


Code:
awk '{
  !a[$4]{a[$4]=$4; n[$4]="session."$4"."$6"."$7}
  a[$4]{print > n[$4]}
' file

Brug nawk eller / usr/xpg4/bin/awk på Solaris, hvis du får fejl.

Hilsen
  #3 (permalink)  
Old 04-21-2009
elinenbe elinenbe is offline
Registreret Bruger
  
 

Join Date: Dec 2008
Stillinger: 8
Undskyld, jeg burde have været mere specifik. Den starter session linier alle ende med noget lignende:

20090409 000122 - BD0 - Bestil 123 starter session med kunden 12-port 34
20090409 000123 - EF0 - Bestil 234 starter session med klienten 347 port 38
...

Og både klient og havnen er dynamiske værdier.

Yeah, I'm getting fejl - jeg kører dette under cygwin, så jeg ikke har let adgang til nawk.
  #4 (permalink)  
Old 04-21-2009
devtakh devtakh is offline
Registreret Bruger
  
 

Join Date: oktober 2007
Beliggenhed: Bangalore
Posts: 514
Prøv denne --
$ Sort-k 4 logfil | awk 'NR \u003d\u003d 1 (prev \u003d $ 4; txt \u003d "session." $ 4 "." $ 6 "." $ 7; printf ( "% s \ n% s", txt, $ 0); getliine) (if (prev! ~ $ 4) (txt \u003d "session." $ 4 "." $ 6 "." $ 7; printf ( "% s \ n% s", txt, $ 0); prev \u003d $ 4) else (print 0 $; prev \u003d $ 4)) '

vil give noget som dette --

session.11F.Processing.
20090409 000127 - 11F - Processing20090409 000.127 - 11F - Forarbejdning
20090409 000127 - 11F - Query 543 starter session
session.BD0.More.Processing
20090409 000122 - BD0 - Mere Processing20090409 000.125 - BD0 - Flere Processing
20090409 000126 - BD0 - Bestil 123 lukke
20090409 000122 - BD0 - Bestil 123 starter session
20090409 000122 - BD0 - Forarbejdning 1
20090409 000124 - BD0 - Forarbejdning 2
session.DD1.Cancel.345
20090409 000125 - DD1 - Annuller 345 starter session20090409 000.125 - DD1 - Forarbejdning
20090409 000126 - DD1 - Forarbejdning 2
session.EF0.Order.234
20090409 000123 - EF0 - Bestil 234 starter session20090409 000.124 - EF0 - Forarbejdning
20090409 000125 - EF0 - Forarbejdning


skål,
Devaraj Takhellambam
  #5 (permalink)  
Old 04-21-2009
Franklin52 Franklin52 is offline Forum Staff  
Moderator
  
 

Join Date: Feb 2007
Indlæg: 4.330
Prøv denne her:


Code:
awk '
{if !($4 in a){a[$4]=$4; n[$4]="session."$4"."$6"."$7}}
{if ($4 in a) {print > n[$4]}}
' file

Hilsen
Closed Thread

Bogmærker

Tags
bash, grep, sed

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 11:55 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0