Awk mail file filteren

Pagina: 1
Acties:

  • Aapie
  • Registratie: September 2004
  • Niet online
hoi,

Ik heb een email log file de file ziet er al volgt uit.
d k 1004210238.380677500 1004210238.454490500 1004210238.679567500 3621 <VOLENDAM@Malawi.com> local.EDAM@Frankrijk.com 6053 81

ik heb het volgende script dat de unix timestamp om zet in gmt tijd, het script geeft de foute emails weer die mis gegaan zijn.
Wat ik nu wil is dat het script mij vraag welke datum en tijd ik wil filteren.

Wie kan mij helpen ?


code:
1
2
3
4
5
6
7
8
BEGIN{{print "Hieronder een lijst met alle foute emails:"}

{print "---------------------------------------------"}}
{if ($1 ~ /d/ && $2 ~ /d/)  {nr =nr+1 ; printf  $7" ""%s\n%s\n",(""), strftime("%c", $3) }}
END {{print "---------------------------------------------"}
{print "Er zijn:",nr " foute emails}}
....
.



thx

[ Voor 6% gewijzigd door Aapie op 22-05-2008 17:56 ]


  • vanaalten
  • Registratie: September 2002
  • Laatst online: 18:31
Wat is precies je probleem? Het binnenhalen van user input?
code:
1
2
3
4
5
6
7
BEGIN{
  printf("Welke datum? ")
  getline datum < "-"              # input from stdin
  printf("Welke tijd? ")
  getline tijd < "-"              # input from stdin
  ....
}

  • Aapie
  • Registratie: September 2004
  • Niet online
Dat is het probleem niet, maar zoals je kunt zien in de log file staat niet de gmt tijd maar de unix tijd dus ik kan niet zomaar zeggen kijk in de log file.Hij moet dus eerst de gewenste tijd omzetten in unix tijd en die vinden in de log file..

  • vanaalten
  • Registratie: September 2002
  • Laatst online: 18:31
Mmmm... ik snap even niet helemaal hoe die timestamp geformateerd is (groot getal, punt, nog een groot getal?), maar:
code:
1
2
3
4
> awk 'BEGIN{print strftime("%Y %m %d %H %M %S", 1004210238)}'
2001 10 27 21 17 18
> awk 'BEGIN{print mktime("2001 10 27 21 17 18")}'
1004210238


Kan je daar iets mee? strftime en mktime lijken elkaars complement te zijn.

  • jschot
  • Registratie: Oktober 2002
  • Laatst online: 09-07-2025
Ik zou inderdaad naar mktime kijken. Let er wel op dat zowel mktime als strftime GAWK-specifieke uitbreidingen zijn.

Als je toch niet met data < 1970 te maken hebt kan je iets als dit doen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BEGIN {
                printf "Vanaf welke datum? (YYYY MM DD HH MM SS) "
                getline datum < "-"
                start = mktime(datum)
                print "Hieronder een lijst met alle foute emails vanaf", datum
                print "-----------------------------------------------"
}
$1 == "d" && $2 == "d" && $3 >= start {
        nr++
        printf $7 "%s\n%s\n",(""), strftime("%c", $3)
}
END {
                print "-----------------------------------------------"
                print "Er zijn:", nr, "foute emails"
}

  • Aapie
  • Registratie: September 2004
  • Niet online
Geniaal ! Het werkt ! mag ik jullie vriendelijk bedanken !

  • Aapie
  • Registratie: September 2004
  • Niet online
Nou heb ik nog 1 vraagje, kan het ook dat je alleen het jaar, maand en dag in kan vullen ?
nu is het zo dat ik alles in moet vullen jaar, maand, dag, uur, min, sec

Zo kan ik alles van 1 dag in een keer zien.

  • jschot
  • Registratie: Oktober 2002
  • Laatst online: 09-07-2025
Oke, je wilde 1 specifieke dag, terwijl ik alles vanaf het opgegeven moment laat zien. Dit is vrij makkelijk aan te passen.

Globaal: Lees alleen de datum in en vul die aan met 0'en. Introduceer daarnaast een 2e variable 'einde = start + 86400' waar je mee ook vergelijkt.

  • Aapie
  • Registratie: September 2004
  • Niet online
Eigenlijk best simpel !! Super bedank !

Zo leer ik nog is awk'n, val trouwens vies tegen wat je er allemaal over kan vinden

  • jschot
  • Registratie: Oktober 2002
  • Laatst online: 09-07-2025
joosthaarman schreef op donderdag 22 mei 2008 @ 18:13:
Zo leer in nog is awk'n, val trouwens vies tegen wat je er allemaal over kan vinden
Bedoel je dat er weinig (goede) informatie over is te vinden? In dat geval zijn de volgende links misschien wel handig:

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
En is het niet de bedoeling dat je zelf je huiswerk maakt?

  • Aapie
  • Registratie: September 2004
  • Niet online
Is het niet zo dat je van elkaar kan leren ?

  • Thandor
  • Registratie: Juni 2002
  • Laatst online: 21:51

Thandor

SilverStreak

AWK kun je goed leren door het juist zelf te doen :). Niet de tutorials doorlezen met 'Ja, ik snap het wel' maar alles zelf een keer intypen en de output analyseren. Uiteraard is het niet verkeerd om elkaar te helpen maar AWK-schoolopdrachten (en ja, ik heb ook AWK gehad en gecoached ;)) is iets wat je uiteindelijk het beste zoveel mogelijk zelf kunt doen.

Profiel | https://thandor.net - hardware
And the rest of us would be carousing the aisles, stuffing baloney.


  • Aapie
  • Registratie: September 2004
  • Niet online
Klopt helemaal, leuke opleiding trouwens ict beheer ;)
Pagina: 1