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
Ta ut data ur en log fil
Re: Ta ut data ur en log fil
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.
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.
Re: Ta ut data ur en log fil
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 ....?

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
twitter @ BarreGargamel
blogg @ Gargamel.NU
- 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
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....

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...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
- 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
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…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
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.
- 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
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:
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:
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å:
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
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
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"