![]() |
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.
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
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:
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
....
Citat:
|
|
||||
|
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
Hälsningar |
|
||||
|
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. |
|
||||
|
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 |