PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AWK & NR Variable



tr0nix
11.05.2005, 13:43
Hallo zusammen

Ich bin gerade am awk Scripten. Nun habe ich das Problem, dass ich zuerst durch die ganze Datei durchparsen muss um einige Informationen rauszuholen um anschliessend einzelne Zeilen nochmals neu einzulesen.

Dazu dachte ich, kann ich die Variable NR (welches ja die aktuelle Zeilennummer wiedergibt) einfach auf die gewünschte Zeile setzen und dann mittels $... auf das entsprechende Feld zugreifen.

Irgendwie klappt das nicht :o(

Hier ist der Codeschnipsel. _CONNECTIONS ist die Anzahl gesamtzeilen im Script (END { _CONNECTIONS = NR; }).


for( NR = 0; NR < _CONNECTIONS; NR++ ) {
x=(100 / _CONNECTIONS * NR);
y=(50 / _MAXSIZE * $4 );
printf("x: %i, y: %i\n", x, y);
}


Weiss jemand, wieso das nicht geht? Kann man nicht hin-und-herhüpfen in den Zeilen mit awk?

Helfen würde mir auch, wenn ich mit AWK im vorherrein feststellen könnte, wieviele Zeilen die Input-Datei hat.

Gruss
Joel

P.S.

{
line[NR] = $0;
}
ist keine Lösung.. ich will ggf. mehrere Millionen Zeilen damit analysieren können ;o). So wird der wohl alles ins Memory laden.

Wolfgang
12.05.2005, 09:19
Hallo
Ich bin nicht so vertraut mit AWK, löse solche Dinge meist mit Perl. ;)
Da bin ich mehr zu Hause.
Aber dein Problem die Zeilenzahl der Dateien vorher zu bestimmen, würde ich mit
export var_zeilen=$(wc -l); awk ...
lösen.
Wenn du das schnelle wc benutzt, und die Variable exportierst, sollte dein awk Zugriff auf die Variable haben.
Du kannst natürlich auch im BEGIN Block von awk wc -l selbst als Systembefehl verwenden und den Wert in einer Variablen speichern.
Hoffe etwas geholfen zu haben.
Gruß Wolfgang

tr0nix
12.05.2005, 10:57
Naja das dachte cih eben auch zuerst, fands aber ein wenig "unsauber". Ich werde jetzt wohl ein Shellscript-Wrapper drüber lassen und zuerst die Zeilen zählen inklusive allen Informationen die ich brauche und anschliessend ein zweites Script schreiben welches mir mit den von der Shell exportierten Variablen die Auswertung macht.

Wens interessiert:
Ich will ein Shellscript schreiben welches als Input ein snoop (solaris tcpdump)-Logfile einliest und daraus auf der Shell ein Kurvendiagram bastelt mit Zeit und bytes-Durchsatz als Achsen.
Weniger weils nützlich ist, mehr weils einfach cool ist ^^

Cyber
12.05.2005, 11:41
@trOnix:

Das kannst dann gleich mal rüberwachsen lassen, weil ich des öfteren snoop einsetze. :]

tr0nix
12.05.2005, 12:06
Bin noch am entwickeln ;o) komm nicht so vorwärts da es hier plötzlich einen Arbeitsschub gab und Solaris nur im Geschäft vorhanden ist.

Ich schau, dass ich es so in ner Woche fertigscripten und auf meine HP posten kann ;o)!

tr0nix
17.05.2005, 14:32
Resultat siehe http://www.unixboard.de/vb3/showthread.php?p=103385 ;o)