Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeile für Zeile zusammen rechnen
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
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ä
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:
Super....Danke für die vielen Beispiel, hab mich für das Beispiel von fs111 mit bc entschieden, funktioniert einwandfrei.
Danke
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.