RE: Re: awk script zum inkrementieren
Hallo Jan, vielen, vielen Dank. In Wirklichkeit läuft auch dein erstes Script, nur dass es die von sessionize.pl erzeugte Session-Nr als $1 belässt. Ich kannte leider die -v Option nicht und wusste nicht, wie ich die Startwerte als Parameter definiere. Das gewünschte Format ergibt sich also mit Script 2 (wie unten, aber statt \VisitorID=%d; SessionID=%s\ \VisitorID=%d; SessionID=%d\) und sort sess.log | tr -d '\r' | gawk -v visitor=1 -v session=2 -f log.awk cookie.log entsprechend der Definition in WUMprep logfileFormats.txt: Cookie picasso.wiwi.hu-berlin.de - - [10/Dec/1999:23:06:31 +0200] GET /index.html HTTP/1.0 200 3540 http://www.berlin.de/; Mozilla/3.01 (Win95; I) VisitorID=10001; SessionID=20001 Also nochmal danke, du hast mir tagelanges Trial and Error ohne Ergebnis erspart. Gruß Gebhard -Original Message- From: Jan Trippler [mailto:[EMAIL PROTECTED] Sent: Wednesday, October 01, 2003 11:29 PM To: Debian-User-German Subject: Re: Re: awk script zum inkrementieren Am Mittwoch, 1. Oktober 2003 13:59 schrieb Gebhard Dettmar: [Beispiel-Datei] Eins war mir noch nicht ganz klar, Du hast geschrieben, dass *die Session-ID aus den realen Sessions gebildet werden soll* - ich habe jetzt mal einfach angenommen, dass in der Session-ID der ursprüngliche Wert stehen soll und das Script entspr. geändert. Das Script kannst Du auf 2 Wegen aufrufen: als Shell-Script: log.sh sort session.log | tr -d '\r' | \ awk ' BEGIN { prev = ; } $1 != prev { prev = $1; visitor ++; } { printf %s \VisitorID=%d; SessionID=%s\\n, substr ($0, length($1) + 2), visitor, $1;} ' visitor=1 neues_log /log.sh oder als awk-Script: log.awk BEGIN { prev = ; } $1 != prev { prev = $1; visitor ++; } { printf %s \VisitorID=%d; SessionID=%s\\n, substr ($0, length($1) + 2), visitor, $1;} /log.awk dann aber mit folgender Syntax (eine Zeile): sort session.log | tr -d '\r' | awk -v visitor=1 -f log.awk neues_log Der tr mittendrin dient der Beseitigung des DOS-Zeilenendes (ich weiss nicht, ob die Originaldatei auch damit ankommt). Jan -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl) -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: awk script zum inkrementieren
On Freitag, 3. Oktober 2003 17:12, Gebhard Dettmar wrote: Hallo Jan, vielen, vielen Dank. In Wirklichkeit läuft auch dein erstes Script, nur dass es die von sessionize.pl erzeugte Session-Nr als $1 belässt. Ich kannte leider die -v Option nicht und wusste nicht, wie ich die Startwerte als Parameter definiere. Außer der -v Option gibt es noch min. zwei Wege Startparameter zu übergeben: 1. im Script innerhalb von BEGIN {}, wie auch bei Jan zu sehen 2. du kannst Startwerte als Argumente übergeben, z.B. im Anschluß an die zu verarbeiteten Dateien, und aus dem Array ARGV[] in dem die Argumente ab ARGV[1] stehen, du mußt allerdings ggf. ARGC (die Zahl der Argumente) im Awk-Script anpassen, damit deine Startwerte nicht als zu verarbeitende Dateien interpretiert werden. HTH [ToFu gelöscht!] -- Gruß Frank -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
RE: Re: awk script zum inkrementieren; angehängt: beispielSessionized.zip
ich habe den Eindruck, dass meine Mails nicht in der Liste ankommen, deshalb forwarde ich sie ausnahmsweise mal. Meine auch nicht; habe auf den ersten Versuch, meine Anfrage zu verschicken, sogar eine Antwort von meinem Mailer-Daemon (den ich im ersten Moment für eine Swen-Mail hielt) gekriegt: - Transcript of session follows - ... while talking to murphy.debian.org.: RCPT To:[EMAIL PROTECTED] 550 [EMAIL PROTECTED]: User unknown 550 [EMAIL PROTECTED]... User unknown -- Der 2. Anlauf klappte dann. -- Ein paar Beispielzeilen wären sehr hilfreich gewesen. Allerdings, sorry. Hab ein paar angehängt. Du hast das das aber ganz richtig erschlossen. Leider kriege ich widersprüchliche Fehlermeldungen: gawk: awk.txt:4: session=20001 visitor=10001 gawk: awk.txt:4: ^ syntax error Häh? Ich rufe über gawk -f auf, hab das Script im Beispiellog nochmal unten drangehängt. Also vielen Dank erstmal und Gruß Gebhard -Original Message- From: Jan Trippler [mailto:[EMAIL PROTECTED] Sent: Tuesday, September 30, 2003 9:23 PM To: Gebhard Dettmar Subject: Fwd: Re: awk script zum inkrementieren Importance: High Hallo Gebhard, ich habe den Eindruck, dass meine Mails nicht in der Liste ankommen, deshalb forwarde ich sie ausnahmsweise mal. Gruß Jan -- Weitergeleitete Nachricht -- Subject: Re: awk script zum inkrementieren Date: Tue, 30 Sep 2003 20:31:36 +0200 From: Jan Trippler [EMAIL PROTECTED] To: [EMAIL PROTECTED] Am Dienstag, 30. September 2003 16:09 schrieb Gebhard Dettmar: [...] - $1 wird zu $2, $1 ist nun die Sess.-Nr. Sortiert ist das ganze weiterhin nach Timestamps. Das habe ich nach Session Nr. sortiert in sort.log geschrieben und moechte jetzt ein awk-Script drueberlaufen lassen, das ans Zeilenende Session- und VisitorID setzt und in dem Fall, dass $1 ungleich $1 aus der vorausgehenden Zeile ist, Session- und VisitorID um 1 inkrementiert (a la '$1 != prev {print $0, $(NF+1)=SessionID=i++} for i=10001 o.s..), so dass jede Session eine je eigene Session-/VisitorID am Ende hat. [...] Ein paar Beispielzeilen wären sehr hilfreich gewesen. Ich denke mal, es sieht so aus: Session-ID IP irgendwas 0815 111.222.000.111 ... und Du willst es so haben: Session-ID IP irgendwas Dein_neues_Ende 0815 111.222.000.111 ... VisitorID=10001; SessionID=20001 und das ganze so, dass ein (mir unbekannter Startwert) der Session- und Visitor-ID jedesmal inkrementiert wird, wenn sich Spalte 1 ändert. Korrekt? Das geht mit awk z. B. so (ungetestet): awk ' BEGIN { prev = -1; } $1 != prev { prev = $1; session ++; visitor ++; } { printf %s VisitorID=%d; SessionID=%d\n, $0,session,visitor;} ' session=20001 visitor=10001 sort.log neues_log wobei die Werte 20001 und 10001 die Startwerte sind. Jan --- beispielSessionized.zip Description: Binary data
RE: Re: awk script zum inkrementieren; angehängt: beispielSessionized.zip
ich habe den Eindruck, dass meine Mails nicht in der Liste ankommen, deshalb forwarde ich sie ausnahmsweise mal. Meine auch nicht; habe auf den ersten Versuch, meine Anfrage zu verschicken, sogar eine Antwort von meinem Mailer-Daemon (den ich im ersten Moment für eine Swen-Mail hielt) gekriegt: - Transcript of session follows - ... while talking to murphy.debian.org.: RCPT To:[EMAIL PROTECTED] 550 [EMAIL PROTECTED]: User unknown 550 [EMAIL PROTECTED]... User unknown -- Der 2. Anlauf klappte dann. -- Ein paar Beispielzeilen wären sehr hilfreich gewesen. Allerdings, sorry. Hab ein paar angehängt. Du hast das das aber ganz richtig erschlossen. Leider kriege ich widersprüchliche Fehlermeldungen: gawk: awk.txt:4: session=20001 visitor=10001 gawk: awk.txt:4: ^ syntax error Häh? Ich rufe über gawk -f auf, hab das Script im Beispiellog nochmal unten drangehängt. Vielleicht kannst du mal gucken, ob es bei dir läuft, ich habe hier auf Arbeit UnixUtils for Win32 und kriege öfters Fehlermeldungen von Scripts, die zu Hause laufen, dass ich nicht weiß, ob ich denen trauen soll. Also vielen Dank erstmal und Gruß Gebhard -Original Message- From: Jan Trippler [mailto:[EMAIL PROTECTED] Sent: Tuesday, September 30, 2003 9:23 PM To: Gebhard Dettmar Subject: Fwd: Re: awk script zum inkrementieren Importance: High Hallo Gebhard, ich habe den Eindruck, dass meine Mails nicht in der Liste ankommen, deshalb forwarde ich sie ausnahmsweise mal. Gruß Jan -- Weitergeleitete Nachricht -- Subject: Re: awk script zum inkrementieren Date: Tue, 30 Sep 2003 20:31:36 +0200 From: Jan Trippler [EMAIL PROTECTED] To: [EMAIL PROTECTED] Am Dienstag, 30. September 2003 16:09 schrieb Gebhard Dettmar: [...] - $1 wird zu $2, $1 ist nun die Sess.-Nr. Sortiert ist das ganze weiterhin nach Timestamps. Das habe ich nach Session Nr. sortiert in sort.log geschrieben und moechte jetzt ein awk-Script drueberlaufen lassen, das ans Zeilenende Session- und VisitorID setzt und in dem Fall, dass $1 ungleich $1 aus der vorausgehenden Zeile ist, Session- und VisitorID um 1 inkrementiert (a la '$1 != prev {print $0, $(NF+1)=SessionID=i++} for i=10001 o.s..), so dass jede Session eine je eigene Session-/VisitorID am Ende hat. [...] Ein paar Beispielzeilen wären sehr hilfreich gewesen. Ich denke mal, es sieht so aus: Session-ID IP irgendwas 0815 111.222.000.111 ... und Du willst es so haben: Session-ID IP irgendwas Dein_neues_Ende 0815 111.222.000.111 ... VisitorID=10001; SessionID=20001 und das ganze so, dass ein (mir unbekannter Startwert) der Session- und Visitor-ID jedesmal inkrementiert wird, wenn sich Spalte 1 ändert. Korrekt? Das geht mit awk z. B. so (ungetestet): awk ' BEGIN { prev = -1; } $1 != prev { prev = $1; session ++; visitor ++; } { printf %s VisitorID=%d; SessionID=%d\n, $0,session,visitor;} ' session=20001 visitor=10001 sort.log neues_log wobei die Werte 20001 und 10001 die Startwerte sind. Jan --- beispielSessionized.zip Description: Binary data
Re: Re: awk script zum inkrementieren
Am Mittwoch, 1. Oktober 2003 13:59 schrieb Gebhard Dettmar: [Beispiel-Datei] Eins war mir noch nicht ganz klar, Du hast geschrieben, dass *die Session-ID aus den realen Sessions gebildet werden soll* - ich habe jetzt mal einfach angenommen, dass in der Session-ID der ursprüngliche Wert stehen soll und das Script entspr. geändert. Das Script kannst Du auf 2 Wegen aufrufen: als Shell-Script: log.sh sort session.log | tr -d '\r' | \ awk ' BEGIN { prev = ; } $1 != prev { prev = $1; visitor ++; } { printf %s \VisitorID=%d; SessionID=%s\\n, substr ($0, length($1) + 2), visitor, $1;} ' visitor=1 neues_log /log.sh oder als awk-Script: log.awk BEGIN { prev = ; } $1 != prev { prev = $1; visitor ++; } { printf %s \VisitorID=%d; SessionID=%s\\n, substr ($0, length($1) + 2), visitor, $1;} /log.awk dann aber mit folgender Syntax (eine Zeile): sort session.log | tr -d '\r' | awk -v visitor=1 -f log.awk neues_log Der tr mittendrin dient der Beseitigung des DOS-Zeilenendes (ich weiss nicht, ob die Originaldatei auch damit ankommt). Jan -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
awk script zum inkrementieren
Liebe Leute, keine Ahnung, ob das hier OT ist. Doch beim Googlen habe ich einige Linux-Listen gefunden, die solche Fragen behandeln. Folgendes: ich habe ein Logfile und eine Sammlung von Perl-Scripts (WUMprep) u.a. sessionizer.pl Dieses Script unterteilt die Hits des raw Files in zusammenhaegende Aufrufe und setzt Session-Nummern vor die IP-Nr. des Hosts - $1 wird zu $2, $1 ist nun die Sess.-Nr. Sortiert ist das ganze weiterhin nach Timestamps. Das habe ich nach Session Nr. sortiert in sort.log geschrieben und moechte jetzt ein awk-Script drueberlaufen lassen, das ans Zeilenende Session- und VisitorID setzt und in dem Fall, dass $1 ungleich $1 aus der vorausgehenden Zeile ist, Session- und VisitorID um 1 inkrementiert (a la '$1 != prev {print $0, $(NF+1)=SessionID=i++} for i=10001 o.s..), so dass jede Session eine je eigene Session-/VisitorID am Ende hat. Das brauche ich aus Formatgruenden (habe ECLF = ohne SessionID, detectRobots.pl benoetigt leider Cookie-Format mit SessionID. Im Prinzip brauche ich das, was sessionizer an den Anfang setzt, am Ende, aber eben genau in dem Format: VisitorID=10001; SessionID=20001 usw.) Leider kriege ich das nicht hin und beim googlen hab ich auch nichts gefunden. Weiá jemand Rat? Besten Dank im voraus Gebhard -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: awk script zum inkrementieren
Sorry Gebhard für die PM, ich hatte mich in der Mailadresse vertan. Am Dienstag, 30. September 2003 16:09 schrieb Gebhard Dettmar: [...] - $1 wird zu $2, $1 ist nun die Sess.-Nr. Sortiert ist das ganze weiterhin nach Timestamps. Das habe ich nach Session Nr. sortiert in sort.log geschrieben und moechte jetzt ein awk-Script drueberlaufen lassen, das ans Zeilenende Session- und VisitorID setzt und in dem Fall, dass $1 ungleich $1 aus der vorausgehenden Zeile ist, Session- und VisitorID um 1 inkrementiert (a la '$1 != prev {print $0, $(NF+1)=SessionID=i++} for i=10001 o.s..), so dass jede Session eine je eigene Session-/VisitorID am Ende hat. [...] Ein paar Beispielzeilen wären sehr hilfreich gewesen. Ich denke mal, es sieht so aus: Session-ID IP irgendwas 0815 111.222.000.111 ... und Du willst es so haben: Session-ID IP irgendwas Dein_neues_Ende 0815 111.222.000.111 ... VisitorID=10001; SessionID=20001 und das ganze so, dass ein (mir unbekannter Startwert) der Session- und Visitor-ID jedesmal inkrementiert wird, wenn sich Spalte 1 ändert. Korrekt? Das geht mit awk z. B. so (ungetestet): awk ' BEGIN { prev = -1; } $1 != prev { prev = $1; session ++; visitor ++; } { printf %s VisitorID=%d; SessionID=%d\n, $0,session,visitor;} ' session=20001 visitor=10001 sort.log neues_log wobei die Werte 20001 und 10001 die Startwerte sind. Jan -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)