Hi,
das ist ein Script aus einem Buch:
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/awk -f # # Programmname: countwords.awk { # Durchläuft alle Felder einer Zeile for(f=1; f <= NF; ++f) field[$f]++ } END { for(word in field) print word, field[word] } |
Diese Stelle der ersten for-Schleife verstehe ich leider überhaupt nicht:
1 | field[$f]++ |
Im Buch steht folgendes zu der ersten for-Schleife: "Jedes Wort wird hier als Wortindex für ein Array benutzt und inkrementiert (um eins erhöht). Existiert ein solcher Index noch nicht, wird dieser neu erzeugt und um den Wert eins erhöht. Existiert bereits ein entsprechender »Wortindex«, so wird nur die Speicherstelle zum zugehörigen Wort um eins erhöht".
Und das habe ich leider überhaupt nicht verstanden. Wo wird hier überprüft ob etwas existiert? Eine if-Bedingung gibt es hier nicht. Und warum wird hier ein Präinkrement verwendet und nicht ein Postinkrement? Bei for-Schleifen benutze ich immer zusätzliche Variablen, in die ich dann Werte zwischenspeichere und auch if-Bedingungen. Ich vermute, dass man diese Zeile auch so umschreiben kann?
In der zweiten Schleife wird der Indexname(das Wort selbst) und dessen Häufigkeit ausgegeben. Wie bzw. wo werden Wörter der Variable "word" zugewiesen? Ausgabe sieht dann so aus:
1 2 3 4 5 6 | ./countwords.awk mrolympia.dat Dorian 1 2000 1 2001 1 USA 5 ... |
Wäre super, wenn mir jemand helfen könnte dieses Beispiel zu verstehen. Danke!