PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AWK mit Spalten und Variablen



svern
04-06-2003, 11:41
Hey,
ich möchte folgende Variable, die eine Spalte für den AWK sein soll, an den AWK-Befehl übergeben:

DSSPALTE[1]=3

der AWK-Befehl ist etwas komplexer...

cat $FILENAME | sed s/,//g | awk -v yesterday=$YESTERDAY '/^..[0-9]:[0-5][0-9]/ {command=sprintf("/usr/bin/rrdtool update /home/reporter/datenbanken/vier_werte_db.rrd `date +%%s --date=\"%s %s\"`:%s:%s:%s:%s\n", yesterday, $1, $3, $4, $5, $2);system(command)}'


Soweit funzt alles, allerdings ohne meine Variable.... nun möchte ich aber die Variable mit dabei haben, das sähe ungefähr so aus:


cat $FILENAME | sed s/,//g | awk -v yesterday=$YESTERDAY r=${DSSPALTE[1]} '/^..[0-9]:[0-5][0-9]/ {command=sprintf("/usr/bin/rrdtool update /home/reporter/datenbanken/vier_werte_db.rrd `date +%%s --date=\"%s %s\"`:$r:%s:%s:%s\n", yesterday, $1, $4, $5, $2);system(command)}'

oder alternativ:

cat $FILENAME | sed s/,//g | awk -v yesterday=$YESTERDAY r=${DSSPALTE[1]} '/^..[0-9]:[0-5][0-9]/ {command=sprintf("/usr/bin/rrdtool update /home/reporter/datenbanken/vier_werte_db.rrd `date +%%s --date=\"%s %s\"`:%s:%s:%s:%s\n", yesterday, $1, $r, $4, $5, $2);system(command)}'

das funzt aber alles nicht, dann kommt nämlich die Fehlermeldung:
awk: cmd. line:2: fatal: cannot open file `/^..[0-9]:[0-5][0-9]/ {command=sprintf("/usr/bin/rrdtool update /home/reporter/datenbanken/vier_werte_db.rrd `date +%%s --date=\"%s %s\"`:$r:%s:%s:%s\n", yesterday, $1, $4, $5, $2);system(command)}' for reading (No such file or directory)


Was aber definitiv nichts mit der Datei zu tun hat (die klappt ja mit obiger Aufforderung.

Hat jemand ne Idee, wie ich die Variable in diesem Script als Spalte deklarieren kann?


In einem kleinen Testscript klappte das alles wunderbar:
>var=2
>cat ./testdat.txt | awk -v r=$var '{print $r}'

Da wurden die Spalten ausgegeben, aber bei meiner obigen längeren Syntax eben nicht. (Variable ist Pflicht) :-)

Thx

Svern

svern
04-06-2003, 13:11
habs

war scheinbar wieder sehr einfach:

vor die 2te variable muss auch noch ein -v (zur Variablendeklaration)

muss man ja wissen...