Polytropon <freebsd(at)edvax.de> wrote:
> Ich möchte in einem awk-Skript die Eingabedatei definieren, aus der
> gelesen werden soll. Es ist eine CSV-Datei. Nach "man awk" gibt es
> dafür FILENAME, also schrieb ich:
FILENAME ist read-only. Du möchtest vermutlich ARGC und
ARGV setzen. Mir ist allerdings unklar, warum Du den
Namen der Eingabedatei im Script hardcoden möchtest.
(Alternativ kann man natürlich auch im BEGIN- oder END-
Block »getline« in einer Schleife aufrufen.)
> FILENAME = "blubb.csv";
> FS = ":";
Das sollte vermutlich in einem »BEGIN {...}« Block stehen.
Alles, was außerhalb von Blöcken steht, wird als Pattern
bzw. boolsche Ausdrücke interpretiert; obige Zuordnungen
sind halt immer »True« und haben eine Default-Action.
Wenn awk ein kleines bisschen cleverer wäre, sollte er
in solchen Fällen eine Warnung ausgeben.
Außerdem: Wenn es CSV-Dateien sind, dann solltest Du ","
als Separator nehmen, nicht ":". Anderenfalls sind es
keine CSV-Dateien.
> !/^#/ && (length != 0) {
/^[^#]/ ist kürzer und schneller. ;-)
Also, Folgendes sollte funktionieren:
#!/usr/bin/awk -f
BEGIN {
ARGV[1] = "blubb.csv"
ARGC = 2
FS = ","
}
/^[^#]/ {
print $1, $2, $3
...
}
Nur so aus Spielerei: Man kann das gleiche auch in sh
schreiben (einfacher und kürzer als in awk):
#!/bin/sh -
IFS=","
while read line; do
set -- $line
echo $1 $2 $3
...
done < blubb.csv
Und das gleiche in Python würde wie folgt aussehen:
#!/usr/bin/env python
for line in file("blubb.csv"):
if line and line[0] != "#":
parts = line.split(",")
print parts[0], parts[1], parts[2]
...
Gruß
Olli
-- Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M. Handelsregister: Registergericht Muenchen, HRA 74606, Geschäftsfuehrung: secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün- chen, HRB 125758, Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart FreeBSD-Dienstleistungen, -Produkte und mehr: http://www.secnetix.de/bsd $ dd if=/dev/urandom of=test.pl count=1 $ file test.pl test.pl: perl script text executable To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org with "unsubscribe de-bsd-questions" in the body of the messageReceived on Fri 10 Apr 2009 - 17:30:23 CEST