#!/bin/bash
# berechnet die Kontostände in einer bei Norisbank exportierten CSV-Datei mit Kontobuchungen.
# Die Buchungen werden vorher sortiert in die Datei sort.csv geschrieben, die am Ende wieder gelöscht wird.
# Datum wird im Format JJJJMMTT angezeigt. Script speichern z.B. als "check.sh" und die CSV-Datei als "daten.csv"
# Dann im dem Verzeichnis: bash check.sh daten.csv
# oder nur für negative Endsalden: bash check.sh daten.csv | grep NEGATIV
#
# Folgende Tools müssen installiert sein: bash, sed, awk, bc (, cut, sed, tail, head, sort, printf)
CSV_DATEI="$1"
saldo=$(grep "^Letzter K" $CSV_DATEI | cut -d";" -f5 | sed 's/\.//g; s/,/./g')
letztes_datum=""
tagessumme=0
echo "Starte mit Saldo: $saldo"
echo "--------------------------------------------"
tail -n +9 "$CSV_DATEI" | head -n -1 | awk -F';' '{print $2";"$3";"$12}' \
| while IFS=";" read -r datum text betrag; do
datum=$(echo "$datum" | sed -E 's#\b([0-9])\.#0\1.#g; s#\.([0-9])\b#.0\1#g; s#([0-9]+)\.([0-9]+)\.([0-9]+)#\3-\2-\1#; s#-##g; s#;.*##')
betrag=$(echo "$betrag" | sed 's/\.//g; s/,/./g')
echo "$datum;$text;$betrag"
done | sort > sort.csv
while IFS=";" read -r datum text betrag; do
# Wenn alle Zeilen angezeigt werden sollen, # in nächster Zeile entfernen:
# echo "$datum $text $betrag"
# Falls neues Datum beginnt → vorherigen Tag abschließen
if [ "$datum" != "$letztes_datum" ] && [ -n "$letztes_datum" ]; then
saldo=$(echo "$saldo + $tagessumme" | bc | LC_NUMERIC=C xargs printf "%.2f")
if (( $(echo "$saldo < 0" | bc -l) )); then
echo "Endsaldo am $letztes_datum: $saldo € NEGATIV"
else
echo "Endsaldo am $letztes_datum: $saldo €"
fi
tagessumme=0
fi
# Summe für diesen Tag fortschreiben
tagessumme=$(echo "$tagessumme + $betrag" | bc)
letztes_datum="$datum"
done < sort.csv
# Letzten Tag abschließen
if [ -n "$letztes_datum" ]; then
saldo=$(echo "$saldo + $tagessumme" | bc | LC_NUMERIC=C xargs printf "%.2f")
if (( $(echo "$saldo < 0" | bc -l) )); then
echo "Endsaldo am $letztes_datum: $saldo € NEGATIV"
else
echo "Endsaldo am $letztes_datum: $saldo €"
fi
fi
rm sort.csv