PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Spalteninhalte dividieren



upperlimit
20.04.2005, 17:05
Hallo,

ich möchte gerne die Elemente einer Spalte durch die Elemente einer zweiten Spalte dividieren. Dazu folgendes Beispiel mit dem Datenfile data.

me@home: cat data
1.20 0.2
4.3 3.4

Ein anschliessender 'awk'-Befehl ergab jedoch die Fehlermeldung

me@home: awk '{print $1/$2}' data
awk: Kommandozeile:1: (FILENAME=data FNR=1) Fatal: Division durch Null versucht;

auch

me@home: awk '{print ($1*1.0)/$2}' data

half nicht.
Meine Schlussfolgerung war, dass awk die (Dezimal-)punkte falsch interpretierte, d.h. nach dem Punkt abschnitt. Die Folge: 1 / 0 => Division durch Null.
Also ersetzte ich die Punkte durch Kommata, jedoch mit demselben Resultat.

Wie kann das sein ? Was mache ich falsch ?
Gibt es Lösungen mit alternativen Kommandos/Programmiersprachen (ev. in TCL)?


upperlimit

cremi
20.04.2005, 19:07
also bei mir funktioniert das tadellos



laurin@rincewind:~/tmp$ cat data
1.20 0.2
4.3 3.4
laurin@rincewind:~/tmp$ awk '{print $1/$2}' data
6
1.26471
laurin@rincewind:~/tmp$


ich hab ne englishe version von debain installiert - wenn ich die punkte mit beistrichen vertausche liest er nur die zahl vorm beistrich



laurin@rincewind:~/tmp$ cat data
1,20 0,2
4,3 3,4
laurin@rincewind:~/tmp$ awk '{print $1/$2}' data
inf
1.33333
laurin@rincewind:~/tmp$

aber rechnen tut er schon richtig:
1/0 = undendlich und
4/3 = 1.333

upperlimit
20.04.2005, 20:10
Hallo,

das Problem liegt offensichtlich in einem seltsamen Verhalten von awk unter den SuSE 9.x Distris.

Meine awk-Version 3.1.3 zeigt offensichtlich dieselben Probleme wie einige seiner Vorgängerversionen (wie eine Recherche in der SuSE Mailing list ergab).

Abhilfe (zumindest bei mir) gelang, als ich die Umgebungsvariable LANG mittels

LANG=POSIX

gesetzt habe.


upperlimit

Schlaubi_fi.de
21.04.2005, 01:34
Moin,

wie wärs mit 'bc'

http://www.eggdrop.ch/texts/unixtools/