Durchschnitt von Logfileeinträgen berechnen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von doonot, 13.12.2007.

  1. doonot

    doonot Mitglied

    Dabei seit:
    05.12.2007
    Beiträge:
    37
    Zustimmungen:
    0
    Und wieder hallo zusammen :)

    ich habe ein logfile mit einer zahl pro zeile ( die einträge erfolgen all 2 minuten, und werden immer überschrieben)

    ich möchte jeweils den durchschnitt aller zahlen ausrechnen. für das müsste ich alle zusammenzählen und geteilt an wc -l machen, dass ich einen durchschnittswert bekomme.

    wie kann ich alle zusammenrechnen, wenn ich nicht weiss, wie viele einträge vorhanden sind (da diese immer varieren?)

    vielen dank
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. caba_

    caba_ (caba{_,}|manuw)

    Dabei seit:
    07.08.2007
    Beiträge:
    334
    Zustimmungen:
    0
    na wenn du immer nur einen eintrag in der logfile hast kannst du nicht wissen was vor 10 Minuten war.

    Oder sehe ich da was falsch?
     
  4. doonot

    doonot Mitglied

    Dabei seit:
    05.12.2007
    Beiträge:
    37
    Zustimmungen:
    0
    ne ne, du verstehst mich falsch, mein logfile sieht etwa so aus:

    Code:
    383214
    829872
    12446
    2098759
    209871
    578
    432
    384
    528
    3204
    477
    666
    341
    492
    520
    295
    484
    372
    77777
    731
    442
    630
    272
    494
    151
    268
    336
    363
    1291
    693
    380
    476
    293
    236
    459
    560
    332
    
    nun möchte ich den durchschnitt (aber ich weiss nicht wieviele zeilen da sind, da das file all 2 minuten überschrieben wird, und ggf. neue zeilen dazu kommen)
     
  5. #4 2TAKTER, 13.12.2007
    Zuletzt bearbeitet: 13.12.2007
    2TAKTER

    2TAKTER Foren As

    Dabei seit:
    26.11.2007
    Beiträge:
    94
    Zustimmungen:
    0
    Ort:
    Würzburg (zugezogen)
    lies mit grep -c oder cat die zeilenanzahl aus und lass ne addition durch ne schleife jagen mit anschließender division durch die zeilenanzahl

    EDIT:
    Code:
    grep -c . logfile
    folgender code gibt dir zumbeispiel die Zeilenanzahl der /var/log/messages in die variable $MSGANZ aus
    Code:
    MSGANZ=$(grep -c . /var/log/messages)
    echo $MSGANZ
    
     
  6. doonot

    doonot Mitglied

    Dabei seit:
    05.12.2007
    Beiträge:
    37
    Zustimmungen:
    0
    also die Zeilenanzahl habe ich ja schon mit wc -l filename

    ich habe gehröt das man mit sort alles adieren kann?

    habs mal so versucht, geht aber nicht :(

    Code:
     ADD_LOG="awk ' $1 ' testlogfile  | sort "
    
    anschliessend:

    Code:
    AV_WERT='expr "$ADD_LOG" / $(wc -l testlogfile)'
     
  7. #6 2TAKTER, 13.12.2007
    Zuletzt bearbeitet: 13.12.2007
    2TAKTER

    2TAKTER Foren As

    Dabei seit:
    26.11.2007
    Beiträge:
    94
    Zustimmungen:
    0
    Ort:
    Würzburg (zugezogen)
    1.:
    Code:
    wc -l
    gibt dir keine Zahl aus sondern eine Zahl + den Dateinamen (damit kann man nicht rechnen)
    2.:
    Code:
    ADD_LOG=$(awk ' $1 ' testlogfile  | sort )
    das gibt dir alle Werte getrennt mit nem Leerzeichen zurück...
    3.:
    Code:
    AV_WERT='expr "$ADD_LOG" / $(wc -l testlogfile)'
    kann nicht funktionieren, da du sagst "String mit allen Werten durch Leerzeichen getrennt dividieren durch Zeilen mit Dateinamen."

    also mache es wie folgt:
    Code:
    DIVISOR=$(grep -c . testlogfile)
    SUMME=0
    
    den Wert von $SUMME zählst du jetzt in einer Schleife hoch, die so lang ist wie $ADD_LOG werte hat... am ende dividierst du $SUMME durch $DIVISOR
     
  8. #7 doonot, 13.12.2007
    Zuletzt bearbeitet: 13.12.2007
    doonot

    doonot Mitglied

    Dabei seit:
    05.12.2007
    Beiträge:
    37
    Zustimmungen:
    0
    danke schön, bin noch anfänger, nimms mir nicht übel :)

    hochzählen meinst du mit einer for schleife?
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    verdammte scheisse, ich habe keine ahnung wie ich diese schleife machen soll, das ich schlussendlich in $summe eine zahl habe :(
     
  9. #8 bytepool, 13.12.2007
    Zuletzt bearbeitet: 13.12.2007
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    hi,

    vielleicht solltest du mal gucken dass du dir ein kurzes allgemeines Programmier Tutorial oder so durchliest, for-Schleifen sind ja doch recht elementar.

    Mit dem was Wolfgang gestern hier schrieb: http://www.unixboard.de/vb3/showpost.php?p=270533&postcount=8 hast du doch eigentlich schon alles was du dafuer brauchst.
    Schau dir nochmal
    Code:
    limit=5; for (( a = 0; a < $limit; a++)); do echo $a; done 
    an, dann sollte eigentlich schon alles klar sein. Naja, falls dir diese Syntax unbekannt ist, muesstest du das natuerlich nochmal nachlesen um es zu verstehen ;)
    Was du noch wissen muesstest, ist dass man fuer Berechnungen let oder (( benutzen muss, wie gestern auch schon angesprochen. Einfach nur SUMME=$SUMME+$ZEILE duerfte nicht funktionieren, aber mit let davor schon.

    edit:
    ach, mist, man merkt dass ich nicht aus der scripting Ecke komme, in bash geht das natuerlich noch einfacher, du brachst ja gar keine "normale" Zaehlschleife, du kannst dir den Inhalt der Datei auch einfach mit cat ausgeben lassen, und darueber iterieren, ist noch einfacher.
    Also so in etwa:
    Code:
    for i in $(cat test.dat); do echo $i; done
    Noch mehr kann ich es dir eigentlich schon nicht mehr vorkauen ;)

    mfg,
    bytepool
     
  10. #9 doonot, 13.12.2007
    Zuletzt bearbeitet: 13.12.2007
    doonot

    doonot Mitglied

    Dabei seit:
    05.12.2007
    Beiträge:
    37
    Zustimmungen:
    0
    Ja ich weiss schon das eine for schleife basic wissen ist. es ist nicht so das ich nicht wüste wie eine schleife funktioniert, aber ich wusste nicht wie man in einer schleife jede einzelne zeile miteinander zusammenrechnen kann.

    ich hatte noch nie einen kurs, geschweige den von unix oder scripten, ich musste mir alles selbst beibringen, ûnd habe vor gut 2 wochen andgefangen damit. deshalb bin ich auch sehr dankbar um die hilfe, die ihr mir anbietet.

    ich werde dies sofort versuchen, dankee!!!
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    aber mit dieser for schleife erreiche ich doch nicht das was ich schlussendlich haben muss???. ich habe das von 2Takter -->
    Code:
    DIVISOR=$(grep -c . testlogfile)
    , das habe ich verstanden und auch schon ausprobiert.

    ich muss nur noch wissen wie ich den ganzen inhalt miteinander addieren kann, dies weise ich einer variable zu und schlussenldich wie ihr sagt diese / divisor --> durchschnittswert.
     
  11. #10 bytepool, 13.12.2007
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    jup, schau dir einfach nochmal meinen edit einen Post weiter oben an, fuege die einzelnen Elemente zusammen, und voila, da ist deine Loesung ;)

    mfg,
    bytepool
     
  12. doonot

    doonot Mitglied

    Dabei seit:
    05.12.2007
    Beiträge:
    37
    Zustimmungen:
    0
    :( :( ;(?(:( ich glaube wir reden aneinander vorbei

    Code:
    for i in $(cat test.dat); do echo $i; done
    das heisst sozusagen das gleiche wie öffne test.dat

    ich will das alles im file zusammengezählt wird, dass ich eine ganze zahl habe am schluss :(:(:(:(??

    PS: ich weiss es nervt vielleicht, aber ich fahre immer wieder gegen die wand
     
  13. #12 bytepool, 13.12.2007
    Zuletzt bearbeitet: 13.12.2007
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Ja, nee, ich weiss schon was du willst, moechte dir nur eigentlich auch nicht unbedingt die Loesung auf dem Praesentierteller geben, weil das Problem erstens sehr einfach ist, und zweitens sehr elementar, will sagen du hast da wahrscheinlich mehr von wenn du selber drauf kommst. Ich mach das nicht um dich zu aergern oder so ;)

    Ehm, ja, nee, kommt drauf an was du unter oeffnen verstehst, im allgemeinen Programmier jargon waere die Antwort darauf "nein".

    In jedem schleifen durchlauf wird die naechste Zeile ausgelesen, so dass du damit im eigentlichen body der Schleife arbeiten kannst. Du musst dir natuerlich was anderes als "echo $i" da hinschreiben...

    Ich fasse nochmal zusammen:
    mit
    Code:
    ((SUMME = $SUMME + $ZEILE ))
    kannst du Berechnungen durchfuehren, und mit
    Code:
    for Zeile in $(cat test.dat); do
       echo $Zeile;
       #oder was immer du hier machen willst
    done
    kannst du ueber die einzelnen Zeilen iterieren.

    Mhhja, und das ist dann eigentlich auch schon die Loesung...

    mfg,
    bytepool
     
  14. doonot

    doonot Mitglied

    Dabei seit:
    05.12.2007
    Beiträge:
    37
    Zustimmungen:
    0
    das finde ich ja nett von dir das du mich weiter bringen willst, ich habe inzwischen auch begriffen das du in der for schleife willst das ich anstatt echo ... etwas anderes hineinschreibe :) du sagst $summe und $zeile, aber wie sind die definiert, $summe haben wir ja am anfang auf 0 gesetzt, $zeile gibst bis jetzt noch nicht.

    ich verzweifle, ich bin scohn den ganzen tag an diesem problem, aber weiss nicht wie ich das scheiss file zusammenzählen kann. auch nach deinen posts.. :(

    weshlab nicht ienfach mit awk und dann an sort übergeben? ist das nicht auch ne möglichkeit? ihc habs am anfang doch nur falsch hingeschrieben, weil mir der syntax noch nicht so bekannt ist :(
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 2TAKTER, 13.12.2007
    Zuletzt bearbeitet: 13.12.2007
    2TAKTER

    2TAKTER Foren As

    Dabei seit:
    26.11.2007
    Beiträge:
    94
    Zustimmungen:
    0
    Ort:
    Würzburg (zugezogen)
    ok hier ist das ganze script vorgekaut

    Code:
    DATEI="/pfad/zum/file"
    
    SUMME=0
    DIVISOR=$(grep -c . ${DATEI})
    for i in $(cat ${DATEI}); do SUMME=$(expr $SUMME + $i); done
    echo $(expr ${SUMME} / ${DIVISOR})
    du müsstest natürlich den pfad anpassen

    EDIT: Achtung! Der Ausgabewert ist bereits der Durchschnitt... allerdings berücksichtigt dieser keine Dezimalstellen!

    EDIT2: So ist die Schleife etwas übersichtlicher für dich:
    Code:
    DATEI="/pfad/zum/file"
    
    SUMME=0
    DIVISOR=$(grep -c . ${DATEI})
    for i in $(cat ${DATEI});
      do
        SUMME=$(expr $SUMME + $i)
      done
    echo $(expr ${SUMME} / ${DIVISOR})
     
  17. #15 doonot, 13.12.2007
    Zuletzt bearbeitet: 13.12.2007
    doonot

    doonot Mitglied

    Dabei seit:
    05.12.2007
    Beiträge:
    37
    Zustimmungen:
    0
    was soll ich sagen, vielen dank an alle. wisst ihr, ich weiss ihr denkt ich bin ein volltrottel, aber für euch sind das basics. ich steh noch ganz am anfang und was mir noch nicht so klar ist:
    summe +$1, nimmt er zuerst 0, geht dan in die erste zeile und rechnet den wert der zeile zum akuellen summen wert? anschliessend zur 2., zur 3.?
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Wenn ich jetzt am schluss vom script noch sagen möchte, das der durchschnitt in eine zusätzliche variable gschrieben werden soll, kann ich das som achen?

    Code:
    AVERAGE=$(expr ${SUMME} / ${DIVISOR})
    hoffenltich stimmt wenigstens das :)
     
Thema:

Durchschnitt von Logfileeinträgen berechnen

Die Seite wird geladen...

Durchschnitt von Logfileeinträgen berechnen - Ähnliche Themen

  1. Wieviel Kaffe trinkt ihr im Durchschnitt am Tag?

    Wieviel Kaffe trinkt ihr im Durchschnitt am Tag?: Nunja, einfach mal geschaetzt, wie viel ihr so pro Tag trinkt? :think:
  2. Durchschnittswert aus Funktion

    Durchschnittswert aus Funktion: habt ihr ne Idee wie ich das mit dem Durchschnitt hinbekomme? select date_format(datum , '%d.%m.%Y' )"datum", maketime(hour(zeit), "00",...
  3. vmstat durchschnittswerte?

    vmstat durchschnittswerte?: Hi, mit vmstat bekommt man wirklich schöne Werte angezeigt. http://linuxwiki.de/vmstat Hier werden auch einige erklärt. Ich kann auch mit...