![]() |
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Regler | Links | Albums | FAQ | Members List | Kalender | Søgning | Dagens Stillinger | Mark Forums Read |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Søg denne tråd | Rate Thread | Display Modes |
|
|
|
||||
|
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:
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:
|
|
||||
|
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 |
|
||||
|
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. |
|
||||
|
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 |
![]() |
| Bogmærker |
| Tags |
| bash, grep, sed |
| Thread Tools | Søg denne tråd |
| Display Modes | Bedøm denne tråd |
|
|