awk: Summe von Felder

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
pinguino
Beiträge: 147
Registriert: 23.01.2007 23:11:46

awk: Summe von Felder

Beitrag von pinguino » 02.05.2011 17:06:50

Hallo,

folgende Situation:

Code: Alles auswählen

12 25 37
43 56 69
71 86 93
Ich habe 9 Zahlen, die in 3 Zeilen sind. Jetzt möchte ich (37 + 56 + 71) addieren. Die Reihenfolge muß beibehalten werden. ( $3 + $2 + $1 )
Dafür habe ich folgende Ansatz verwendet:

Code: Alles auswählen

BEGIN {  RS="\n"; x = 0  }

{

y += $( NF + x )

x -= -1

}

END {

print y

}

aber das Ergebnis ist 37. Wo liegt der Fehler ?
Gruß

Pinguino

>>Nota bene<<

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: awk: Summe von Felder

Beitrag von GoKi » 02.05.2011 17:23:24

Code: Alles auswählen

x -= -1
das incrementiert x um 1, der Rest deines Code will

Code: Alles auswählen

x -= 1
MfG GoKi
:wq

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: awk: Summe von Felder

Beitrag von Duff » 03.05.2011 07:42:46

Genau. Ersetzte das x -= -1 mal durch x--;

Dann sollte es funktionieren.
Oh, yeah!

Benutzeravatar
Meillo
Moderator
Beiträge: 9247
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: awk: Summe von Felder

Beitrag von Meillo » 03.05.2011 09:17:53

Der Begin-Block ist unnoetig, da RS sowieso auf Newline steht und bei awk alle Variablen mit 0 (bzw. dem leeren String) initialisiert sind.


Ich wuerde es so machen:

Code: Alles auswählen

NR==1 {sum+=$3}
NR==2 {sum+=$2}
NR==3 {sum+=$1}
END {print sum}
... ganz nach dem Motto ``Guter Code ist langweiliger Code''.
Use ed once in a while!

Antworten