Datei auslesen Daten addieren und sortieren

mehlbox

mehlbox

Eroberer
Hallo zusammen,

in der xferlog steht folgendes drin als Beispiel:
Datum IP Adresse Bytes Verzeihnis mit Datei dann das kleine i und o das bedeutet i = incoming Traffic o = outgoing.
Sun Nov 25 04:54:16 2007 0 xxx.xxx.xxx.xxx 447930 /ftp/user1/send/BB005908/1_Bild_001.jpg b _ i r user1 ftp 0 * c
Sun Nov 25 04:54:17 2007 0 xxx.xxx.xxx.xxx 374523 /ftp/user8/send/BB005908/2_Bild_002.jpg b _ i r user8 ftp 0 * c
Sun Nov 25 04:54:18 2007 0 xxx.xxx.xxx.xxx 340449 /ftp/user6/send/BB005908/3_Bild_004.jpg b _ i r user6 ftp 0 * c
Sun Nov 25 04:54:20 2007 0 xxx.xxx.xxx.xxx 377439 /ftp/user3/send/BB005908/4_Bild_005.jpg b _ i r user3 ftp 0 * c
Sun Nov 25 04:54:21 2007 0 xxx.xxx.xxx.xxx 295895 /ftp/user2/send/BB005908/5_Bild_006.jpg b _ i r user2 ftp 0 * c
Sun Nov 25 04:54:22 2007 0 xxx.xxx.xxx.xxx 274998 /ftp/user1/send/BB005908/6_Bild_007.jpg b _ i r user1 ftp 0 * c
Sun Nov 25 04:54:23 2007 0 xxx.xxx.xxx.xxx 409051 /ftp/user3/send/BB005908/7_Bild_008.jpg b _ i r user3 ftp 0 * c
Sun Nov 25 04:54:24 2007 0 xxx.xxx.xxx.xxx 354890 /ftp/user2/send/BB005908/8_Bild_009.jpg b _ i r user2 ftp 0 * c

Nun hatte ich gerne nach userx sortiert die Summe von den übertragenden Bytes i (incoming Traffic siehe LOG) und o (outgoing Traffic siehe LOG) für den leszten zurückliegenden Tag.

Hoffe habe mich so richtig ausgedrückt leider habe ich keine Ahung vom Programmieren

Danke und Gruß
 
hi,

und was genau ist jetzt deine Frage an uns?

[...] leider habe ich keine Ahung vom Programmieren
Ich fuerchte ohne Programmierung wirst du das nicht automatisiert bekommen. Ich wuerde mir an deiner Stelle Perl anschauen...

mfg,
bytepool
 
Hallo
Wir sind hier keine Skriptfabrik.

Das Problem ist auch mit Shellmitteln realisierbar, allerdings weniger trivial als mit Perl und co.

Und mal schnell einen Einzeiler dafür eintippen (der dann über mehrere Zeilen geht) mag ich nicht so ohne ganz deine Eigenbemühungen gesehen zu haben.

Wolfgang
 
Fast richtig ??

Hallo zusammen,

habe mal mit Google gesucht und so einiges herausgefunden doch habe ich nun nur noch ein kleines Problem mit der Ausgabe vielleicht könnt ihr mir da helfen?
Habe folgendes Script hin bekommen welches aber leider komische Zahlen ausspuckt, was ist daran denn noch falsch??
#!/bin/bash

cd /var/log/

file="xferlog"

user=`awk '{print $14 }' $LOGFILE | sort |uniq`

for b in $user
do
bytes=`grep $file -e $b |awk '{sum+=$8}END{print sum}'`
echo -e "$b bytes: $bytes"
done
Ausgabe sieht so aus:
userxy bytes: 1.8482e+10 -> das ist die falsche Ausgabe

Danke und Gruß
 
Hallo
Abgesehen davon, dass du das alles innerhalb von awk hättest realisieren können:
Verwende printf mit entsprechendem Format.

Z.B Zehn -stellig mit 3 Nachkommastellen (Fließkomma)
Code:
printf "%14.3\n", VAR

Gruß Wolfgang
 
Code:
awk '{ bites[$14] += $8} END {  num = asort(bites, sbites); for (i=1; i<=num; ++i) print i, sbites[i] ; }' Dateiname

asort ersetzt die Indizes durch numerische Indizes, d.h., die usernamen gehen verloren. Dazu muesstest Du wohl auf bites nochmal zugreifen.
 

Ähnliche Themen

Rollei Mini Wifi Camcorder

Mysteriöser 11.4 Absturz - Maschine läuft, SSH und vor Ort Login unmöglich

Displayport + externer Monitor zeigt bei startx nichts erst bei DVI

Festplatte stirbt, dd funktioniert nicht

NagiosGrapher 1.7.1 funktioniert nicht

Zurück
Oben