Hallo,
heute nach langer Zeit mal wieder ein neuer Blogeintrag. Seit langer Zeit ärgert mich die Tatsache, dass ich das Ereignisprotokoll der FritzBox nicht so einfach als csv-Datei exportieren kann, damit ich die Dateien besser auswerten kann.
Zur Erläuterung: csv steht für „comma-separated-value“, also Komma-getrennte-Werte, also praktisch eine Datei, die z.B. so aussieht:
13.05.17, 14:30:12,WLAN-Anmeldung ist gescheitert(2,4 GHz): Zugangsprüfung fehlgeschlagen. MAC-Adresse: XX:XX:XX:XX:XX:XX.
13.05.17,13:39:10, WLAN-Anmeldung ist gescheitert(2,4 GHz): Zugangsprüfung fehlgeschlagen. MAC-Adresse: XX:XX:XX:XX:XX:XX
Wenn ich im Firefox das Protokoll markiere und dann in einen Texteditor einfüge, wird aus der Liste leider folgendes:
13.05.17
14:30:12
WLAN-Anmeldung ist gescheitert(2,4 GHz): Zugangsprüfung fehlgeschlagen. MAC-Adresse: XX:XX:XX:XX:XX:XX.
13.05.17
13:39:10
WLAN-Anmeldung ist gescheitert(2,4 GHz): Zugangsprüfung fehlgeschlagen. MAC-Adresse: XX:XX:XX:XX:XX:XX.
Sehr ärgerlich, so lässt sich das nicht auswerten, beim Importieren in LibreOffice sieht es genauso aus.
Eine mögliche Lösung ist folgendes Script:
#!/bin/bash
# this script takes a log file where all infos are in seperate lines and re-arranges it as a csv file
# use this script this way:
# scriptname oldfile newfile lines separator# separate lines in separate files
for ((z=0;z<${3};z++))
do
awk „$z == NR%3“ ${1} > ${z}.temp.txt
done# join separate files
paste -d „$4“ *.temp.txt > ${2}
rm *.temp.txt
Das Script muss mit folgenden Parametern aufgerufen werden:
- Name der Quelldatei
- Name der Zieldatei
- aus wie vielen Zeilen besteht eine Informationssatz?
- Trennzeichen – unbedingt mit doppelten Anführungszeichen!
Also zum Beispiel so:
scriptname quelldatei.txt zieldatei.txt 3 „;“
Zur Funktionsweise: Zuerst zerlegt mein Script die 3., 3.+1, 3.+2 Zeile in jeweils eine extra Datei, um diese Dateien im zweiten Teil wieder mit dem passenden Trennzeichen neu zusammenzufügen. Zum Schluss werden die temporären Dateien gelöscht.
Ist bestimmt nicht eleganteste Lösung, aber es funktioniert… Jetzt kann ich endlich FritzBox-Protokolle richtig auswerten!
Quellen:
- http://www.thegeekstuff.com/2010/01/8-powerful-awk-built-in-variables-fs-ofs-rs-ors-nr-nf-filename-fnr/?ref=binfind.com/web
- http://www.problem-hilfe.de/linux/h/Shells/paste.html
- https://forum.ubuntuusers.de/topic/jede-x-te-zeile-auslesen-und-in-datei-schreiben/
- http://stackoverflow.com/questions/12218609/passing-variable-to-nr-in-awk-command-not-working
Hallo .. wie kann ich das Script ohne Linux (zB auf einem Mac mit macOS Ventura) nutzen ??
Da ich keine Ahnung von Mac habe, kann ich nur hier vermuten, dass Du das Script an die zsh-Shell anpassen musst.
Zunächst mal die Interpreterzeile allgemeingültig machen, also statt #!/bin/bash #!/bin/sh schreiben. Das ist meist ein Link zur Standardshell des Systems. Wenn keine Bash-Sonderfunktionen verwendet werden, funktioniert es.
Ansonsten das Ganze gleich in awk schreiben, da es als Skriptsprache für die Bearbeitung von Textdateien entwickelt wurde.
Hallo Mart,
danke für Deinen Hinweis. Ich versuche das beim nächsten Script zu berücksichtigen. Hast Du eine fertige Lösung für awk?