– journal.sh –

journal.sh

Mal wieder ein kleines, nützliches Script.

Oben ein Screenshot, hier der Code als Text:


#!/bin/bash
#
# (c) GPLv3 S. Wagner
#
msg=$(echo $(date +"%a %Y.%m.%d ")$*)
sed -i "1i$msg" ~/journal.txt

Mein Anliegen ist, kleine Informationshäppchen in einer Datei zu sammeln, die alle mit einem Zeitstempel versehen sind. Die Datenmenge ist zu gering für eine Datenbank. Eine Tabellenkalkulation ist auch zu fett – bis die gestartet ist …

Wie nutze ich das Programm? Ich sammle zur Zeit folgende Informationen:

  • Mein Körpergewicht
  • Den Zählerstand des Stromzählers
  • Anschaffungen und Wartungen des Fahrrads (Schläuche, Mäntel, Bremsbeläge, …)
  • Kilometerstand des Fahrradtachos
  • Verbrauchsmaterial Anschaffungen und Austausch für die Elektrozigarette
  • Ergiebigkeit des Mobiltelefonakkus

Die Protokollierung findet unregelmäßig statt, ebenso die Auswertung. Zum Wiederfinden der Informationen zu einem Thema nutze ich immer wieder verwendete Schlüsselwörter sowie grep.

Beispiel der Protokollierung:

journal.sh Rennrad neuer Schlauch hinten RED 700×18/25c (18/25-622) SV

Das Wort „Rennrad“ ist mein Schlüsselwort, aber spielt syntaktisch keine Sonderrolle. Es ist nur meine Konvention das erste Wort als Schlüselwort zu verwenden. Etwas aufpassen muss man mit Sonderzeichen, die von der Shell interpretiert werden könnten, etwa $, %, ?, !, | etc., so dass es keine schlechte Idee ist den ganzen Text in einfache Anführungsstriche einzuschließen:

journal.sh ‚Rennrad neuer Schlauch hinten RED 700×18/25c (18/25-622) SV‘

Das Script setzt nur mittels des Date-Befehls: date +“%a %Y.%m.%d “ das Datum in Form von Di 2015.06.30 vor den Text. Der Text, nämlich alle übergebenen Parameter, wird mit $* hinter das Datum + Leerstelle gesetzt: und in der Variablen msg zwischengespeichert: msg=$(echo $(date +“%a %Y.%m.%d „)$*) .Die Vielzahl der Optionen von date kann man mit date –help als Übersicht oder ausführlicher mit man date studieren. Mit sed wird die Zeile dann vor all die anderen in der Datei journal.txt im Heimatverzeichnis gehängt, so dass die jüngsten Einträge oben stehen. Die Option -i sagt sed dass die Datei in place verändert werden soll. Das 1i… sagt, dass … in Zeile 1 inserted werden soll.

Das war schon alles, also wahrlich kein Hexenwerk. Suchen kann man in der Datei dann wie folgt:
grep -i rad ~/journal.txt
Di 2015.06.30 Rennrad neuer Schlauch hinten RED 700x18/25c (18/25-622) SV
Di 2015.06.30 Rennrad Neuer Mantel hinten Schwalbe, Kevlar Guard, Protect. Level 3, Lugano 23-622 6bar
Mi 2015.02.11 Fahrrad Bremsbeläge hinten neu aufgesetzt
So 2015.01.04 radcomputer Durch-km/h 20.6
So 2015.01.04 radcomputer Max-km 41.8
So 2015.01.04 radcomputer Gesamtzeit 136:42
So 2015.01.04 radcomputer Gesamtkilometer 1535.1
Mi 2014.04.02 Fahrrad Tacho reset

Oder etwa nach kg suchen:

grep -i kg ~/journal.txt
Mi 2015.07.22 88.5 kg
Do 2015.02.19 86.6 kg
Mo 2014.12.08 85.6 kg
Mo 2014.11.24 86 kg

Bei solchen Miniprogrammen ist es oft so, dass man denkt, man habe etwas nützliches geschaffen, aber dann nutzt man es doch nicht, oder nur 3x in der ersten Woche, und dann zeigt sich, dass es weniger praktisch ist als erhofft. Für mich ist das Programm nützlich. Ich habe es über ein Jahr und nutze es immer noch. Wer natürlich kein Shellfenster ohnehin offen hat, der kann ähnlich schnell den Editor öffnen, aber will man dann gerne das Datum manuell eintragen? Den Wochentag protokolliere ich, um mich bei manuellen Kontrollen leichter zu tun, wenn ich etwas speichere,, was gestern oder vorgestern war, und es kommt mir auf die 1-2 Tage an.

Man hätte schauen können, ob man die log-Funktion des Systems verwenden will, aber hätte man sich mit dem ganzen logrotate-Zeuch beschäftigen müssen, dass wolle ich nicht.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.