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
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