The UNIX and Linux Forums  

Go Back   UNIX og Linux Forums > Top Forums > Shell programmering og Skripting
.
google unix.com



Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her.

Mer UNIX og Linux Forum Emner Du kan finne nyttig
Tråd Tråd startet Forum Svar Siste innlegg
grep'ing en fil til en bestemt melding pallak7 Shell programmering og Skripting 3 04-23-2009 12:48
grep'ing for spesifikke kataloger og bruker output å flytte filer JayC89 Shell programmering og Skripting 1 12-06-2008 03:37
Påskynde en Shell Script (finne, grep og en for loop) Dave Stockdale UNIX for Dummies Spørsmål og svar 8 08-11-2008 05:36
Påskynde behandlingen en fil dlam Shell programmering og Skripting 4 07-19-2008 01:47
fartstoleranse opp kompilering på Sun Solaris miljø swamymns Shell programmering og Skripting 2 07-12-2006 01: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 denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 04-21-2009
elinenbe elinenbe is offline
Registrert bruker
  
 

Bli Dato: desember 2008
Innlegg: 8
Question grep'ing og sed'ing biter i bash ... trenger hjelp til påskynde en logg parseren.

Jeg har en fil som er 20 til 80 + MB i størrelse som en bestemt type loggfil.

Den logger en av våre prosesser og denne prosessen er flertrådet. Derfor er loggfilen er slags rot. Her er et eksempel:

Den loggfilen ser slik ut: "Dato Tid - THREAD ID - detaljer", og en ny fil opprettes for hver dag
Sitat:
20090409 000122 - BD0 - 123 Bestill starter økten
20090409 000122 - BD0 - 1 Processing
20090409 000122 - BD0 - Flere Processing
20090409 000123 - EF0 - 234 Bestill starter økten
20090409 000124 - EF0 - Processing
20090409 000124 - BD0 - 2 Processing
20090409 000125 - BD0 - Flere Processing
20090409 000125 - EF0 - Processing
20090409 000125 - DD1 - 345 Avbryt starter økten
20090409 000125 - DD1 - Processing
20090409 000126 - DD1 - 2 Processing
20090409 000126 - BD0 - 123 Bestill nedleggelse
20090409 000127 - 11F - 543 Query starter økten
20090409 000127 - 11F - Processing
..
..
20090409 000135 - 11F - 543 Query nedleggelse
..
20090409 000140 - EF0 - 234 Bestill nedleggelse
..
..
..
20090409 000143 - DD1 - 345 Avbryt nedleggelse
Nå, her der det får være en smerte ... Jeg trenger å dra ut linjene fra "Starter Session" til "Ending Session" for hver tråd-ID, og dumpe disse til separate filer. Imidlertid være i tråd ID kan kopieres i løpet av en dag - men vanligvis ikke i mange timer.

En sesjon kan vare fra 30 sekunder til 4 minutter eller så (~ 1200 linjer) i loggfilen, og det kan være opptil 20 samtidige sesjoner.

Nå har jeg noe som virker - men ganske langsomt. Jeg ender opp grepping og sedding filen over og over. Når filen blir stor, tar det en massiv tid. Jeg håper at noen her kan hjelpe meg optimalisere dette. Hvis mulig, vil jeg gjerne bruke bash.

Takk,
Eric

Her er koden jeg har som fungerer, 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
    ....

Dette gir meg en rekke filer, som ved eksempelvis å logge ovenfor vil bli opprettet som vist nedenfor:
Sitat:
file: session.BD0.Order.123
20090409 000122 - BD0 - 123 Bestill starter økten
20090409 000122 - BD0 - 1 Processing
20090409 000122 - BD0 - Flere Processing
20090409 000124 - BD0 - 2 Processing
20090409 000125 - BD0 - Flere Processing
20090409 000126 - BD0 - 123 Bestill nedleggelse

file: session.DD1.Cancel.345
20090409 000125 - DD1 - 345 Avbryt starter økten
20090409 000125 - DD1 - Processing
20090409 000126 - DD1 - 2 Processing
..
..
..
20090409 000143 - DD1 - 345 Avbryt nedleggelse

file: session.11F.Query.543
20090409 000127 - 11F - 543 Query starter økten
20090409 000127 - 11F - Processing
..
..
20090409 000135 - 11F - 543 Query nedleggelse

file: session.EF0.Order.234
20090409 000123 - EF0 - 234 Bestill starter økten
20090409 000124 - EF0 - Processing
20090409 000125 - EF0 - Processing
20090409 000140 - EF0 - 234 Bestill nedleggelse
  #2 (permalink)  
Old 04-21-2009
Franklin52 Franklin52 is offline Forum Staff  
Moderator
  
 

Bli Date: Feb 2007
Innlegg: 4345
Forutsatt at den første linjen i en økt avsluttes 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

Bruk nawk eller / usr/xpg4/bin/awk på Solaris hvis du får feil.

Hilsen
  #3 (permalink)  
Old 04-21-2009
elinenbe elinenbe is offline
Registrert bruker
  
 

Bli Dato: desember 2008
Innlegg: 8
Beklager, jeg skulle vært mer spesifikke. Den starter økten linjene ende med noe slikt som:

20090409 000122 - BD0 - 123 Bestill starter økten med klienten 12-port 34
20090409 000123 - EF0 - 234 Bestill starter økten med klienten 347 port 38
...

Og både klienten og porten er dynamiske verdier.

Ja, jeg får feil - jeg kjører dette under Cygwin, så jeg har ikke lett tilgang til nawk.
  #4 (permalink)  
Old 04-21-2009
devtakh devtakh is offline
Registrert bruker
  
 

Bli Dato: Oct 2007
Beliggenhet: Bangalore
Innlegg: 514
prøv denne --
$ 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 (forrige! ~ $ 4) (txt \u003d "session." $ 4 »." $ 6 "." $ 7; printf ( "% s \ n% s", txt, $ 0); prev \u003d $ 4) else (print $ 0; prev \u003d $ 4))

vil gi noe slikt --

session.11F.Processing.
20090409 000127 - 11F - Processing20090409 000127 - 11F - Processing
20090409 000127 - 11F - 543 Query starter økten
session.BD0.More.Processing
20090409 000122 - BD0 - Flere Processing20090409 000125 - BD0 - Flere Processing
20090409 000126 - BD0 - 123 Bestill nedleggelse
20090409 000122 - BD0 - 123 Bestill starter økten
20090409 000122 - BD0 - 1 Processing
20090409 000124 - BD0 - 2 Processing
session.DD1.Cancel.345
20090409 000125 - DD1 - 345 avbestille starter session20090409 000125 - DD1 - Processing
20090409 000126 - DD1 - 2 Processing
session.EF0.Order.234
20090409 000123 - EF0 - 234 Bestill starter session20090409 000124 - EF0 - Processing
20090409 000125 - EF0 - Processing


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

Bli Date: Feb 2007
Innlegg: 4345
Prøv denne:


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

Hugseliste

Tags
bash, grep, sed

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 10:33.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0