The UNIX and Linux Forums  
Hej och välkommen från USA till UNIX och Linux Forum! Tack för ditt besök och gå med i vår globala gemenskapen.

Go Back   UNIX och Linux Forum > Upp Forum > Shell-programmering och Skript
.
google unix.com



Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här.

Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
Tråd Thread Starter Forum Svar Senaste Inlägg
grep'ing en fil till ett visst visas pallak7 Shell-programmering och Skript 3 04-23-2009 11:48
grep'ing för särskilda kataloger och använda resultaten för att flytta filer JayC89 Shell-programmering och Skript 1 12-06-2008 03:37
Snabbare en Shell Script (finna, grep och en för loop) Dave Stockdale UNIX for Dummies Frågor & Svar 8 08-11-2008 04:36
Snabbare behandling av ett ärende dlam Shell-programmering och Skript 4 07-19-2008 12:47
påskynda sammanställning på Sun Solaris miljö swamymns Shell-programmering och Skript 2 07-12-2006 12:06

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ök i denna tråd Rate Thread Visningslägen
  #1 (permalänk)  
Old 04-21-2009
elinenbe elinenbe is offline
Registered User
  
 

Join Date: Dec 2008
Inlägg: 8
Question grep'ing och sed'ing klumpar i bash ... behöver hjälp med att påskynda en logg parser.

Jag har en fil som är 20 till 80 + MB i storlek som en viss typ av loggfil.

Den loggar en av våra processer och denna process är multitrådade. Därför loggfilen är lite av en röra. Här är ett exempel:

Den logfile ut: "DATE TIME - Thread ID - Detaljer", och en ny fil skapas för varje dag
Citat:
20090409 000122 - BD0 - Beställ 123 från session
20090409 000122 - BD0 - Behandling 1
20090409 000122 - BD0 - Fler Processing
20090409 000123 - EF0 - Beställ 234 från session
20090409 000124 - EF0 - Behandling
20090409 000124 - BD0 - Behandling 2
20090409 000125 - BD0 - Fler Processing
20090409 000125 - EF0 - Behandling
20090409 000125 - DD1 - Avbryt 345 från session
20090409 000125 - DD1 - Behandling
20090409 000126 - DD1 - Behandling 2
20090409 000126 - BD0 - Beställ 123 avstängning
20090409 000127 - 11F - Query 543 från session
20090409 000127 - 11F - Behandling
..
..
20090409 000135 - 11F - Query 543 avstängning
..
20090409 000140 - EF0 - Beställ 234 avstängning
..
..
..
20090409 000143 - DD1 - Avbryt 345 avstängning
Now, here's där det får vara en smärta ... Jag måste dra ut rader från "Starting Session" till "Ending Session" för varje tråd ID, och dumpar dem till separata filer. Dock vara Thread ID kan dubbleras under loppet av en dag - men inte för många timmar.

En session kan vara från 30 sekunder till 4 minuter eller så (~ 1200 linjer) i loggfil, och det kan vara upp till 20 samtidiga sessioner.

Nu har jag något som fungerar - även om ganska långsamt. Jag slutar grepping och sedding filen och om igen. När filen blir stor, det tar en enorm tid. Jag hoppas att någon här kan hjälpa mig optimera detta. Om möjligt skulle jag vilja använda bash.

Tack,
Eric

Här är koden jag har som fungerar, men är _slow_

Kod:
    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
    ....
Detta ger mig ett antal filer, som genom exemplet loggen ovan skulle skapas enligt nedan:
Citat:
file: session.BD0.Order.123
20090409 000122 - BD0 - Beställ 123 från session
20090409 000122 - BD0 - Behandling 1
20090409 000122 - BD0 - Fler Processing
20090409 000124 - BD0 - Behandling 2
20090409 000125 - BD0 - Fler Processing
20090409 000126 - BD0 - Beställ 123 avstängning

file: session.DD1.Cancel.345
20090409 000125 - DD1 - Avbryt 345 från session
20090409 000125 - DD1 - Behandling
20090409 000126 - DD1 - Behandling 2
..
..
..
20090409 000143 - DD1 - Avbryt 345 avstängning

file: session.11F.Query.543
20090409 000127 - 11F - Query 543 från session
20090409 000127 - 11F - Behandling
..
..
20090409 000135 - 11F - Query 543 avstängning

file: session.EF0.Order.234
20090409 000123 - EF0 - Beställ 234 från session
20090409 000124 - EF0 - Behandling
20090409 000125 - EF0 - Behandling
20090409 000140 - EF0 - Beställ 234 avstängning
  #2 (permalänk)  
Old 04-21-2009
Franklin52 Franklin52 is online now Forum Staff  
Moderator
  
 

Join Date: februari 2007
Inlägg: 4.300
Förutsatt att första raden i en session avslutas med "börjar session" kan du prova det här (inte testat):

Kod:
awk '{
  !a[$4]{a[$4]=$4; n[$4]="session."$4"."$6"."$7}
  a[$4]{print > n[$4]}
' file
Använd nawk eller / usr/xpg4/bin/awk på Solaris om du får fel.

Hälsningar
  #3 (permalänk)  
Old 04-21-2009
elinenbe elinenbe is offline
Registered User
  
 

Join Date: Dec 2008
Inlägg: 8
Sorry, jag borde ha varit mer konkret. Den startar sessionen linjerna alla sluta med något i stil med:

20090409 000122 - BD0 - Beställ 123 börjar sessionen med klienten 12 port 34
20090409 000123 - EF0 - Beställ 234 börjar sessionen med klienten 347 port 38
...

Och både kunden och hamnen är dynamiska värden.

Ja, jag får fel - Jag kör detta under cygwin, så jag inte har enkel tillgång till nawk.
  #4 (permalänk)  
Old 04-21-2009
devtakh devtakh is offline
Registered User
  
 

Join Date: oktober 2007
Ort: Bangalore
Inlägg: 514
prova detta --
$ Sort-k 4 logfile | awk 'NR \u003d\u003d 1 (prev \u003d $ 4; txt \u003d "session." $ 4 "." $ 6 "." $ 7 printf ( "% s \ n% s", txt, $ 0); getliine) (if (föregående! ~ $ 4) (txt \u003d "session." $ 4 "." $ 6 "." $ 7 printf ( "% s \ n% s", txt, $ 0); prev \u003d $ 4) else (print $ 0; prev \u003d $ 4)) '

kommer att ge ut ungefär så här --

session.11F.Processing.
20090409 000127 - 11F - Processing20090409 000.127 - 11F - Behandling
20090409 000127 - 11F - Query 543 från session
session.BD0.More.Processing
20090409 000122 - BD0 - Mer Processing20090409 000.125 - BD0 - Mer Processing
20090409 000126 - BD0 - Beställ 123 avstängning
20090409 000122 - BD0 - Beställ 123 från session
20090409 000122 - BD0 - Behandling 1
20090409 000124 - BD0 - Behandling 2
session.DD1.Cancel.345
20090409 000125 - DD1 - Avbryt 345 start session20090409 000.125 - DD1 - Behandling
20090409 000126 - DD1 - Behandling 2
session.EF0.Order.234
20090409 000123 - EF0 - Beställ 234 börjar session20090409 000.124 - EF0 - Behandling
20090409 000125 - EF0 - Behandling


skål,
Devaraj Takhellambam
  #5 (permalänk)  
Old 04-21-2009
Franklin52 Franklin52 is online now Forum Staff  
Moderator
  
 

Join Date: februari 2007
Inlägg: 4.300
Prova här:

Kod:
awk '
{if !($4 in a){a[$4]=$4; n[$4]="session."$4"."$6"."$7}}
{if ($4 in a) {print > n[$4]}}
' file
Hälsningar
Closed Thread

Komihåglista

Taggar
bash, grep, sed

Thread Tools Sök i denna tråd
Sök i denna tråd:

Avancerad sökning
Visningslägen Betygsätt denna tråd
Betygsätt denna tråd:

Utstationering Regler
Du får inte efter nya trådar
Du får inte efter svar
Du får inte skicka bilagor
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG] kod
HTML-koden är Av
Trackback är
Pingbacks är
Refbacks är




Alla tider är GMT -4. Klockan är nu 09:58.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Översättningar Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX och Linux Forum Innehållet upphovsrättsskyddat © 1993-2009. All Rights Reserved.Ad förvaltning RedTyger

Content Relevant webbadresser från vBSEO 3.2.0