Weller
Anmeldungsdatum: 10. Januar 2007
Beiträge: 104
Wohnort: Gebhardshain
|
Hallo. Ich bekomme von einer Solaranlage tägliche eMails in dieser Form:
Tag:
Summe 393 kWh
Spez. 4.85 kWh/kWp
Max 54.5 kW
Soll 279 kWh
Ist-Ertrag 141 %
Monat:
Summe 11081 kWh
Spez. 136.6 kWh/kWp
Max 696 kWhMax
Mittel 426 kWh
Soll 7261 kWh
Ist-Ertrag 152 %
Jahr:
Summe 78715 kWh
Spez. 970 kWh/kWp Die eMails der letzten Jahre besitze ich noch und würde das jetzt gerne in mysql einlesen um Auswertungen für meine Website machen zu können.
Wie mache ich das am geschicktesten? Manuell scheidet sicherlich aus ☺ Die ganze Sache zerfällt eigentlich in zwei Teile:
1.) eMails abholen - von gMail - und eine Datei schreiben.
2.) Dateien parsen Danke & Gruß,
Andreas
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
Die Überschriften weg und alles in eine Zeile bekommst Du leicht mit awk und tr:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
echo "Tag:
Summe 393 kWh
Spez. 4.85 kWh/kWp
Max 54.5 kW
Soll 279 kWh
Ist-Ertrag 141 %
Monat:
Summe 11081 kWh
Spez. 136.6 kWh/kWp
Max 696 kWhMax
Mittel 426 kWh
Soll 7261 kWh
Ist-Ertrag 152 %
Jahr:
Summe 78715 kWh
Spez. 970 kWh/kWp" | awk '{print $2}' | tr "\n" "\t"
393 4.85 54.5 279 141 11081 136.6 696 426 7261 152 78715 970
|
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Auch ich würde den Mail-Text zuerst mal umwandeln in eine TAB- separierte Liste. Allerdings würde ich es nur mit awk machen, und im Hinblick auf die Robustheit dabei die einzelnen Spalten ganz ausdrücklich einem der betreffenden Werte zuweisen. Mal so als Grobskizze könnte so ein Skript dann so aussehen: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | #!/usr/bin/awk -f
BEGIN { OFS= "\t";
print "Tag:",OFS,OFS,"Monat:",OFS,OFS,"","Jahr:";
print "Summe","Spez.","Max","Soll","Ertrag","Summe","Spez.","Max","Mittel","Soll","Ertrag","Summe","Spez." }
/^Tag:/ { zeit="Tag" } # Block-Merker setzen
/^Monat:/ { zeit="Monat" }
/^Jahr:/ { zeit="Jahr" }
/ Summe/ || # Werte-Array einlesen
/ Spez./ ||
/ Max/ ||
/ Mittel/ ||
/ Soll/ ||
/ Ist-Ertrag/ { wert[zeit,$1]=$2 }
/ Spez./ && zeit=="Jahr" { print wert["Tag","Summe"],wert["Tag","Spez."],wert["Tag","Max"],wert["Tag","Soll"],wert["Tag","Ist-Ertrag"],
wert["Monat","Summe"],wert["Monat","Spez."],wert["Monat","Max"],wert["Monat","Mittel"],
wert["Monat","Soll"],wert["Monat","Ist-Ertrag"],wert["Jahr","Summe"],$2;
delete wert }
|
das dann so aufgerufen würde: track@track:~$ ./mailfilter email.txt
Tag: Monat: Jahr:
Summe Spez. Max Soll Ertrag Summe Spez. Max Mittel Soll Ertrag Summe Spez.
393 4.85 54.5 279 141 11081 136.6 696 426 7261 152 78715 970 Klar brauchst Du vorher noch einen Befehl zum Abholen der Emails, und wenn Du es unbedingt in eine Datenbank einlesen willst, auch noch einen Befehl dafür. (wobei: dort eine CSV- Zeile einzulesen geht relativ einfach !) LG, track
|
michahe
Anmeldungsdatum: 12. Dezember 2013
Beiträge: 824
|
Für das Auswählen und zusammenkopieren der Mails gäbe es noch das Thunderbird-AddON ImportExportTools. Noch einfacher wäre natürlich, wenn sich das Mail-Handling direkt in die parsende Routine einbauen ließe ...
|
theinlein
Anmeldungsdatum: 29. Dezember 2007
Beiträge: 1279
|
Hi, das Abholen der Mails ist wohl etwas aufwändiger.
Hoffentlich haben die einen ordentlichen "Subject" - oder wie kannst du die Mails erkennen? ggf. hilft dir so was ??
https://gist.github.com/jasonrdsouza/1674794
|