awk buggy?

From: Marc Santhoff <M.Santhoff(at)t-online.de>
Date: 18 Jun 2003 19:58:31 +0200

Tag liebe Leute!

Ich habe ein merkwürdiges Phänomen beim systemeigenen (4.8-STABLE) awk
bemerkt:

Zum durchlaufen von Arrays benutzt man den "in" Operator, weil die
Indizes grundsätzlich von Typ string sind.

Die TEstdaten sehen so aus:

zaphod$ cat files
lala
lalu
lulu

Und das Programm so:

BEGIN {
        n=0
        while (getline name < "./files") {
                names[name] = n
                n++
        }
        delete names["lalu"]
}
{ print "Arg is -"$0"-"
                 if ($0 in names) print "Jepp bei "names[$0]
}

Aufruf mit:

zaphod$ awk -f inarrayF.awk files

Und es funktioniert. Tut es aber nur, wenn die Daten aus einer Datei
gelesen werden, anfänglich hatte ich es so versucht:

BEGIN {
        names[lala]=0
        names[lalu]=1
}
...

Das geht leider *nicht*! Es wird niemals eine positive Meldung
ausgegeben.

Ist das ein Bug oder verstehe ich etwas falsch? Eigentlich sollte es
doch egal sein, woher die Daten stammen.

Nächster Test:

BEGIN {
        names[lala]=0
        names[lalu]=1
}
{ print "Arg is -"$0"-"
        for (n in names) {
                print "n is -" n "- names[n] is -" names[n] "-"
        }
}
 Ausgabe:
zaphod$ awk -f inarrayF.awk files
Arg is -lala-
n is -- names[n] is -1-
Arg is -lalu-
n is -- names[n] is -1-
Arg is -lulu-
n is -- names[n] is -1-

Hm, auch kein Treffer. Scheinbar wird nicht mal die LAufvariable
ersetzt. Oder ich bin etwas blind, ich bastele schon etwas zu lange
damit herum

Also nochmal: Bug oder User Error?

Gruß,
Marc

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 18 Jun 2003 - 20:00:30 CEST

search this site