Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Zusammenrechnen

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
riedel1



Anmeldungsdatum: 16.08.1999
Beiträge: 2
Wohnort: BS

BeitragVerfasst am: 16. Jul 2000 16:50   Titel: Zusammenrechnen

Hallo alle miteinander,
erstmal: ich habe NULL Plan vom Programmieren, deshalb auch hier meine Frage:

Ich lasse mir unter Linux eine Datei ausgeben die so aussieht:

eth0 dev 41859020
ippp0 dev 38338681
192.168.33.10 out 35640482
192.168.33.10 in 5227561
192.168.33.20 out 3597970
192.168.33.20 in 34256471

Ich möchte jetzt gerne das ich die in/out der IP's zusammen rechnen lasse (für jede ip extra) und mir der Wert in eine neue Datei geschrieben wird, also so ungefähr:

192.168.33.10 gesammt 40868043
Das ergebnis soll dann ich eine neue Datei geschrieben werden.

Für 192.168.33.20 soll genau das selbe gemacht werden und dann auch in eine neue Datei geschrieben werden.

Ist das möglich? Wenn ja, wie kann sowas auch ein nicht Programmierer hinbekommen?

DANKE

riedel
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Jochen
Gast





BeitragVerfasst am: 17. Jul 2000 8:19   Titel: Re: Zusammenrechnen

Hmm, sowas macht man eigentlich nicht mit C, wenn man nicht unbedingt (aus Performance-Gründen oder so) muss. Ein Skript wäre einfacher. Das folgende funktioniert zusammen mit Deinen Testdaten, sollte es also tun:
code:

$2 == "in" || $2 == "out" {
ip[$1] += $3
}
END {
for ( ix in ip ) {
print ix " gesamt " ip[ix]
}
}


Pack den Source in eine Datei namens "ipadd", Aufruf ist dann
awk -f ipadd datei-mit-deinen-daten > auswertung 

Sach Bescheid, falls ich Dich missverstanden habe und es das nicht so tut.

Ach ja: Ich weiss, awk-Skripte sind heutzutage nicht mehr modern. Aber perl kann ich (noch) nicht.

Grüsse, Jochen
 

riedel
Gast





BeitragVerfasst am: 17. Jul 2000 12:13   Titel: Re: Zusammenrechnen

Hi,

sorry, aber sollte gar nicht ion c geschrieben werden. Bin nur ins falsche Forum gelandet

Werde dein Script mal antesten.

Danke
 

riedel1



Anmeldungsdatum: 16.08.1999
Beiträge: 2
Wohnort: BS

BeitragVerfasst am: 17. Jul 2000 13:12   Titel: Re: Zusammenrechnen

Hallo Jochen,

danke für das Programm, es funktioniert.
Aber könntes du mir das Programm erklären, also was es wann macht?
Wäre supernett!

Nochwas, wie kann ich jetzt die Ausgabe anstatt in Kilobytes in Megabyte anzeigen lassen?
_________________
bye
Riedel -> www.riedelweb.de
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Jochen
Gast





BeitragVerfasst am: 17. Jul 2000 14:51   Titel: Re: Zusammenrechnen

Das habe ich befürchtet !

Nun gut. Als erstes musst Du wissen, dass der awk eine ganze Masse schon für uns erledigt. Er
  • öffnet und schliesst Dateien,
  • liest jede Zeile einzeln,
  • zerlegt sie in Felder (1. Feld = $1, 2. Feld = $2, ...).
    awk-Programme bestehen aus Folgen von Bedingungen und Aktionen. Ist die Bedingung erfüllt, wird die dazugehörige Aktion ausgeführt.

    Die erste Bedingung lautet '$2 == "in" || $2 == "out"'. $2 ist das zweite Feld,´also die Stelle, wo in Deinen Daten dev, in oder out vorkommt. Auswerten wollen wir aber nur die Zeilen mit "in" bzw. "out". '$2 == "in"' ist die Abfrage, ob dort "in" steht, dazu analog "out". Die beiden Bedingungen werden Oder-verknüpft (||), d.h, es reicht, wenn entweder das eine oder das andere zutrifft (oder beides). Haben wir also so eine Zeile, wird die Aktion (in den geschweiften Klammern) ausgeführt. Ohne jetzt auf assoziative Arrays näher eingehen zu wollen: Hier wird eine Summe des dritten Feldes einer Zeile (die KBs) zugehörig zur IP-Adresse geführt, die im ersten Feld steckt.

    Die END-Bedingung greift, wenn alle Zeilen gelesen wurden, also keine weiteren Zeilen mehr kommen. Dort wird in einer Schleife über alle aufgetretenen IP-Adressen (for ix in ip) erst die IP-Adresse selbst und dann die Summe an KBs zur IP-Adresse ausgegeben (print ix " gesamt " ip[ix]).

    Hier kannst Du ansetzen, wenn Du lieber MBs haben willst: Anstelle von "ip[ix]" schreibst Du "int(ip[ix]/1024+0.5)". Damit erhältst Du die MBs, gerundet auf volle MBs.
  •  

    Jochen
    Gast





    BeitragVerfasst am: 17. Jul 2000 14:54   Titel: Re: Zusammenrechnen

    Ach ja, falls Dich awk weiterhin interessiert (oder Du einfach noch mehr Infos brauchst): Einfach "info gawk" eingeben bzw. in der KDE-Help (so Du KDE verwendest) die Info-Seiten nach gawk durchsuchen. Nette Einführung, viele Beispiele, Einzeiler, Referenz usw.

    Viel Spass dabei!
     

    Beiträge vom vorherigen Thema anzeigen:   
         Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
    Seite 1 von 1

     
    Gehen Sie zu:  

    Powered by phpBB © phpBB Group
    pro_linux Theme © 2004 by Mandaxy