The UNIX and Linux Forums  
Ciao e benvenuto da parte degli Stati Uniti al UNIX e Linux Forum! Grazie per la visita ed unirsi alla nostra Comunità Globale.

Go Back   UNIX e Linux Forum > Inizio Forum > Shell scripting e di programmazione
.
google unix.com



Shell scripting e di programmazione Pubblica domande su KSH, CSH, SH, Bash, Perl, PHP, sed, awk e da altri script di shell e linguaggi di scripting shell qui.

Più di UNIX e Linux Forum Argomenti potreste trovare utili
Filo Thread Starter Forum Risposte Ultimo Post
grep'ing un file fino a un certo messaggio appare pallak7 Shell scripting e di programmazione 3 04-23-2009 11:48 AM
grep'ing per specifici delle directory, e utilizzando l'uscita per spostare i file JayC89 Shell scripting e di programmazione 1 12-06-2008 03:37 AM
Accelerazione uno script di shell (trovare, e grep un ciclo for) Dave Stockdale UNIX for Dummies Domande & Risposte 8 08-11-2008 04:36 AM
Accelerare la trasformazione di un file dlam Shell scripting e di programmazione 4 07-19-2008 12:47 PM
accelerare l'elaborazione su ambiente SUN Solaris swamymns Shell scripting e di programmazione 2 07-12-2006 12: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 Cerca in questo Thread Rate Thread Modalità di visualizzazione
  #1 (permalink)  
Old 04-21-2009
elinenbe elinenbe is offline
Utente Registrato
  
 

Iscriviti Data: dicembre 2008
Posti: 8
Question grep'ing e sed'ing pezzi in bash ... bisogno di aiuto per l'accelerazione un log parser.

Ho un file che è di 20 - 80 + MB che è un certo tipo di file di log.

E 'uno dei nostri log dei processi e questo processo è multi-threaded. Pertanto, il file di log è una specie di pasticcio. Ecco un esempio:

Il file di log una cosa simile: "DATE TEMPO - FILO ID - Dettagli", e un nuovo file viene creato per ogni giorno
Citazione:
20090409 000122 - BD0 - Ordine di partenza 123 sessione
20090409 000122 - BD0 - Trasformazione 1
20090409 000122 - BD0 - Più di elaborazione
20090409 000123 - EF0 - Ordine di partenza 234 sessione
20090409 000124 - EF0 - Trasformazione
20090409 000124 - BD0 - Trasformazione 2
20090409 000125 - BD0 - Più di elaborazione
20090409 000125 - EF0 - Trasformazione
20090409 000125 - DD1 - Cancellare 345 a partire sessione
20090409 000125 - DD1 - Trasformazione
20090409 000126 - DD1 - Trasformazione 2
20090409 000126 - BD0 - Ordinanza 123 chiusura
20090409 000127 - 11F - Query 543 a partire sessione
20090409 000127 - 11F - Trasformazione
..
..
20090409 000135 - 11F - Query 543 chiusura
..
20090409 000140 - EF0 - Ordinanza 234 chiusura
..
..
..
20090409 000143 - DD1 - Cancellare 345 chiusura
Ora, qui è dove si arriva ad essere un dolore ... Ho bisogno di tirare fuori le righe da "Avvio di seduta" a "Fine Sessione" per ogni Thread ID e discarica di questi file separati. Tuttavia, il thread ID possono essere duplicati nel corso di un giorno - di solito, ma non per molte ore.

Una sessione può durare da 30 secondi a 4 minuti o così (~ 1200 righe) nel file di log, e vi possono essere fino a 20 sessioni.

Ora, ho una cosa che funziona - anche se molto lentamente. Io alla fine grepping e sedding il file più volte. Quando il file viene grande, ci vuole una massiccia quantità di tempo. Io sono qui sperando che qualcuno mi può aiutare ottimizzare questo. Se possibile, vorrei usare bash.

Grazie,
Eric

Qui è il codice che ho, ma è _slow_

Codice:
    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
    ....
Questo mi dà un certo numero di file, che utilizza l'esempio di log di cui sopra potrebbe essere creato, come illustrato di seguito:
Citazione:
file: session.BD0.Order.123
20090409 000122 - BD0 - Ordine di partenza 123 sessione
20090409 000122 - BD0 - Trasformazione 1
20090409 000122 - BD0 - Più di elaborazione
20090409 000124 - BD0 - Trasformazione 2
20090409 000125 - BD0 - Più di elaborazione
20090409 000126 - BD0 - Ordinanza 123 chiusura

file: session.DD1.Cancel.345
20090409 000125 - DD1 - Cancellare 345 a partire sessione
20090409 000125 - DD1 - Trasformazione
20090409 000126 - DD1 - Trasformazione 2
..
..
..
20090409 000143 - DD1 - Cancellare 345 chiusura

file: session.11F.Query.543
20090409 000127 - 11F - Query 543 a partire sessione
20090409 000127 - 11F - Trasformazione
..
..
20090409 000135 - 11F - Query 543 chiusura

file: session.EF0.Order.234
20090409 000123 - EF0 - Ordine di partenza 234 sessione
20090409 000124 - EF0 - Trasformazione
20090409 000125 - EF0 - Trasformazione
20090409 000140 - EF0 - Ordinanza 234 chiusura
  #2 (permalink)  
Old 04-21-2009
Franklin52 Franklin52 is offline Forum Staff  
Moderatore
  
 

Iscriviti Data: febbraio 2007
Messaggi: 4.307
Presumendo che la prima linea di una sessione termina con "partire sessione" si può provare questo (non testato):

Codice:
awk '{
  !a[$4]{a[$4]=$4; n[$4]="session."$4"."$6"."$7}
  a[$4]{print > n[$4]}
' file
Usa nawk / o su Solaris usr/xpg4/bin/awk se ottieni errori.

Saluti
  #3 (permalink)  
Old 04-21-2009
elinenbe elinenbe is offline
Utente Registrato
  
 

Iscriviti Data: dicembre 2008
Posti: 8
Scusa, mi avrebbe dovuto essere più specifico. L'inizio della fine sessione tutte le linee con qualcosa come:

20090409 000122 - BD0 - Ordine di partenza 123 sessione client con 12 porta 34
20090409 000123 - EF0 - Ordine di partenza 234 sessione client con 347 porto 38
...

E sia il client e la porta sono valori dinamici.

Yeah, I'm errori - Io corro sotto cygwin, in modo che non hanno facile accesso a nawk.
  #4 (permalink)  
Old 04-21-2009
devtakh devtakh is offline
Utente Registrato
  
 

Iscriviti Data: ottobre 2007
Località: Bangalore
Interventi: 514
provare questo --
$ Sort-k 4 file di log | awk 'NR \u003d\u003d 1 (prev \u003d $ 4; txt \u003d "sessione". $ 4 "." $ 6 "." $ 7; printf ( "% s \ n% s", txt, $ 0); getliine) (if (prev! ~ $ 4) (txt \u003d "sessione". $ 4 "." $ 6 "." $ 7; printf ( "% s \ n% s", txt, $ 0); prev \u003d $ 4) else (print $ 0; prev \u003d $ 4)) '

darà qualcosa di simile --

session.11F.Processing.
20090409 000127 - 11F - Processing20090409 000127 - 11F - Trasformazione
20090409 000127 - 11F - Query 543 a partire sessione
session.BD0.More.Processing
20090409 000122 - BD0 - Altro Processing20090409 000125 - BD0 - Più di elaborazione
20090409 000126 - BD0 - Ordinanza 123 chiusura
20090409 000122 - BD0 - Ordine di partenza 123 sessione
20090409 000122 - BD0 - Trasformazione 1
20090409 000124 - BD0 - Trasformazione 2
session.DD1.Cancel.345
20090409 000125 - DD1 - Cancellare 345 a partire session20090409 000125 - DD1 - Trasformazione
20090409 000126 - DD1 - Trasformazione 2
session.EF0.Order.234
20090409 000123 - EF0 - 234 Ordine di partenza session20090409 000124 - EF0 - Trasformazione
20090409 000125 - EF0 - Trasformazione


salute,
Devaraj Takhellambam
  #5 (permalink)  
Old 04-21-2009
Franklin52 Franklin52 is offline Forum Staff  
Moderatore
  
 

Iscriviti Data: febbraio 2007
Messaggi: 4.307
Prova questo:

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

Segnalibri

Tag
bash, grep, sed

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 04:05 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0