PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeile für Zeile zusammen rechnen



rthill
25-04-2004, 17:35
Wie kann ich mit einem Skript Zeile für Zeile einer Ausgabe zusammen rechnen?

Hier mein Skript:
------------------------------------------------------------------------------------------------------------
#!/bin/sh

TRAFLOG=/var/log/iptraf
WDIR=/root/scripts

GET=$(fgrep '213.135.239.65' /var/log/iptraf/ip_traffic-1.log|cut -f4 -d";"|cut -f2 -d " ")

echo $GET

------------------------------------------------------------------------------------------------------------

So nun will ich die gesammte Ausgabe von $GET zusammenrechnen: Zeile1+Zeile2+Zeile3.....

Danke im voraus

tinti

fs111
25-04-2004, 18:44
Falls Du wirklich nur Zahlen haben solltest, müsste es so gehen:


for i in $GET; do ergebnis=$(echo "$ergebnis + $i" | bc) ; done

in $ergebnis ist dann das Endergebnis drin.

HTH

fs111

peschmae
25-04-2004, 18:48
Ähm, ich kann die Sache nicht nachvollziehen - also was teht jetzt in $GET?

Ich nehme mal an es seien Zahlen :)



for i in $GET; do echo $i; done


gibt die Zahlen einzeln aus. Jetzt wird noch gerechnet:


SUM=0
for i in $GET; do SUM=$(expr $SUM + $i); done
echo $SUM

Zuerst wird $SUM auf 0 gesetzt, dann wird mittels $() für jede der Zahlen zu $SUM addiert und in $SUM gespeichert. Die Auswertung erfolgt zum Glück von rechts nach Links - d.h. rechts vom = ist noch der "alte" Wert von $SUM und der kann dann auch am Ende wieder in der gleichen Variable landen. :)

Aha, da war einer schneller. Nur weil ich immer eval statt expr schreibe und das dann nicht funktioniert :rolleyes:
@fs111: bc kannte ich noch gar nicht. Sieht nett aus soweit. Allerdings wars bei mir noch gar nicht installiert - also dürfte vermutlich die expr-Variante auf mehr Systemen einfach so gehen. (Mal abgesehen davon dass $() zum ausführen eh nicht so portabel ist ;))

MfG Peschmä

fs111
25-04-2004, 19:19
Original geschrieben von peschmae

@fs111: bc kannte ich noch gar nicht. Sieht nett aus soweit.
[/B]

There is more than one way to do it ;-)

ThorstenS
26-04-2004, 20:06
Das bash prompt Howto ist lesenswert:
http://www.faqs.org/docs/Linux-HOWTO/Bash-Prompt-HOWTO.html

Dort wird z.B. in Kap 4.2 folgende Variante zum summieren genannt:


let TotalBytes=$TotalBytes+$Bytes


BTW:
Ich benutze auch immer $(), da die Systeme mit ksh nicht mehr in meiner Reichweite sind :heul:
Außerem sieht es übersichtlicher aus, als die backticks :cool:

rthill
26-04-2004, 23:19
Super....Danke für die vielen Beispiel, hab mich für das Beispiel von fs111 mit bc entschieden, funktioniert einwandfrei.

Danke