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