Ta ut data ur en log fil

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Medila
Inlägg: 14
Blev medlem: 12 aug 2013, 20:42
OS: Ubuntu

Ta ut data ur en log fil

Inlägg av Medila »

Tjoho. Är det någon stackare som kan hjälpa mig? Jag har en log fil som ser ut ungefär så här:
20131101;01;0101010101;1417;12011;web;1989;1
20131101;01;1212121212;1418;12011;web;1988;2
datum tid blaj blaj blaj blaj blaj
Log filen är stor som faen. Jag vill ta ut tiden och få den presenterad i terminal men kanske ännu hellre på fil. Få ut tiden menar jag 00, 01, 02, 03 osv samt att det visas hur många 01,02,03 osv det finns. jag vill även ha möjlighet att välja den första raden som är datum. (så jag även kan välja vilka datum jag är intresserad av)
Exempel utskrift skulle kunna se ut:
01 343
02 356
03 44
osv

jag har lekt lite med: cat loggfil.txt | cut -d ';' -f2

nån som har en ide? grep, cat, awk, bash, perl allt är av intresse :-D
andol
Inlägg: 3093
Blev medlem: 31 dec 2007, 00:19
OS: Ubuntu
Utgåva: 23.10 Mantic Minotaur

Re: Ta ut data ur en log fil

Inlägg av andol »

Antar att din cut gör det du vill att den ska göra, bara att det inte räcker hela vägen fram? Resten utav vägen borde du komma ifall du komplettera pipen med sort och uniq också. Därefter återstår eventuellt att även få formateringen som du vill ha den.

cat loggfil.txt | cut -d ';' -f2 | sort | uniq --count

Pröva gärna vad du får för resultat ifall du bara kompletterar med sort alt. uniq.

Gällande att välja datum så föreslår jag att du försöker med att slänga in en grep tidigt i pipen.
Användarvisningsbild
Barre
Inlägg: 2298
Blev medlem: 13 dec 2006, 10:23
OS: Ubuntu
Ort: Stockholm
Kontakt:

Re: Ta ut data ur en log fil

Inlägg av Barre »

nu vill inte jag vara den som är den, men det är svårty att låta bli :)

varför köra en cat logfil.txt | cut ... när cut tar en fil som parameter och istället kan ersättas med exempelvis cut -d ';' -f2 logfil.txt ....?
________________________________________________________________
twitter @ BarreGargamel
blogg @ Gargamel.NU
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: Ta ut data ur en log fil

Inlägg av Osprey »

nu vill jag inte heller vara den som är den... :)

men om man vill klämma in en grep, så måste den in mellan cat och cut... om man nu inte helt ersätter cat med grep i tillämpliga fall förstås...

Och om man för övrigt vill ha med cat utan att den egentligen behövs, så kan man ju alltid hänga på "|cat" på slutet....
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: Ta ut data ur en log fil

Inlägg av Johnny Rosenberg »

Medila skrev:Tjoho. Är det någon stackare som kan hjälpa mig? Jag har en log fil som ser ut ungefär så här:
20131101;01;0101010101;1417;12011;web;1989;1
20131101;01;1212121212;1418;12011;web;1988;2
datum tid blaj blaj blaj blaj blaj
Log filen är stor som faen. Jag vill ta ut tiden och få den presenterad i terminal men kanske ännu hellre på fil. Få ut tiden menar jag 00, 01, 02, 03 osv samt att det visas hur många 01,02,03 osv det finns. jag vill även ha möjlighet att välja den första raden som är datum. (så jag även kan välja vilka datum jag är intresserad av)
Exempel utskrift skulle kunna se ut:
01 343
02 356
03 44
osv

jag har lekt lite med: cat loggfil.txt | cut -d ';' -f2

nån som har en ide? grep, cat, awk, bash, perl allt är av intresse :-D
Alla andra verkar ha fattat, så jag är väl ovanligt korkad då, kan jag tänka mig, men jag förstår inte riktigt vad det är du frågar efter…
Först pratar du om tiden, för att i samma veva exemplifiera med ”00, 01, 02, 03”. Vilken del av ”tiden” är detta? Inte år eller månad, förstår jag ju. Och inte dag heller i och med 00. Timmar? Minuter?
Jag skulle nog fatta lite bättre om ditt exempel på utskrift hade någon direkt koppling till de två exempelraderna i början av ditt inlägg också. Var kommer 343, 356 och 44 ifrån?

Kan du ge ett exempel där du visar vad som kan vara indata och vad då det tilltänkta skriptet skulle spotta ur sig, så skulle kanske till och med jag kunna förstå vad det är du försöker göra och därmed kanske även hjälpa till i viss mån…

Alltså, ge mig exempelvis 5-10 (relevanta) rader av text som representerar loggfilen, därefter hur du vill att utskriften ska se ut för just dessa 5-10 rader.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: Ta ut data ur en log fil

Inlägg av Johnny Rosenberg »

Okej, tror jag fattar lite av vad du menar, nu när jag läst igenom det en gång till.
01 343 betyder att 343 rader innehöll 01 i andra fältet? För hela filen eller för ett visst datum? Förstår ändå inte riktigt vad ”ta ut tiden” innebär, den verkar ju INTE vara med i ditt utdata-exempel… Eller menar du ”ta bort tiden”?

Hur som helst, om vi antar att du bara vill veta hur många rader det finns där andra fältet innehåller 01, så borde det väl funka med något i stil med:

Kod: Markera allt

Count=$(cut -d ';' -f2 loggfil.txt | grep "01" | wc -l)
echo 01 $Count
Ska man göra det för alla värden 00-99 kan man väl lägga in det i en for-loop av C-typ:

Kod: Markera allt

# Byt ut nedanstående filnamn mot de du vill ha
InFile="loggfil.txt"
OutFile="loggfilsstatistik.txt"

for (( i = 0; i < 100; i++ )); do
	j=$(printf %02d $i)
	Count=$(cut -d ';' -f2 "$InFile" | grep "$j" | wc -l)
	echo "$i $Count" >> "$FileName"
done
Har inte testat detta, så det kanske är fullt av fel, men kanske något att utgå ifrån i alla fall?
Sedan kanske detta inte heller är snabbast möjliga lösning, eftersom den väldigt jättestora loggfilen kommer att gås igenom 100 gånger…

Om nu detta fungerar, så är tanken i alla fall att resultatet ska hamna i en fil som har det namn du angett för OutFile, i mitt exempel ”loggfilsstatistik.txt”. Det kan kanske vara en god idé att ange hela sökvägen, så är man mer säker på var filen hamnar också:

Kod: Markera allt

Folder="${HOME}/Skrivbord"
InFile="${Folder}/loggfil.txt"
OutFile="${Folder}/loggfilsstatistik.txt"
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Skriv svar

Återgå till "Terminalforum"