Könnte auch für Firmen nützlich sein.
Meine Ausgangsbasis war nämlich die Frage vom Chef "Können wir ermitteln, mit welchen Kunden wir die meisten Telefonkontakte haben?"
Die FB-Anrufliste speichert immer nur 400 Einträge. Daher fügt hole_anrufliste() alle neuen Anrufe der "Sammeldatei" anrufliste.csv hinzu,
die dann für die Berechnung etc. verwendet wird. Script kann also prima als täglicher Cronjob etc. genutzt werden.
Rückwärtssuche für Nummern ohne FB-Telefonbucheintrag baue ich vielleicht noch ein.
(Dasörtliche.de und Gelbe-Seiten klappt testweise schon mal).
Manchmal fehlt bei den Nummern in der FB-Anrufliste die Vorwahl. Diese ergänzt das Script jetzt.
Dazu vorher die Variable "DEFAULT_VORWAHL" mit der eigenen Vorwahl belegen (und Datei speichern.)
Daher sollte das folgende Script verwendet (und die Zeilen 4 und 5 vorher angepasst) werden und nicht das aus #1:
BOX="user:geheim@192.168.178.1"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
INPUT="$SCRIPT_DIR/anrufliste.csv"
FINAL_OUT="$SCRIPT_DIR/count_sum.csv"
HTML_OUT="$SCRIPT_DIR/count_sum.html"
# Anrufliste laden von der Fritzbox
local CALLFILE="$SCRIPT_DIR/calls.csv"
# Bestehende Einträge in Hash (Set) laden
while IFS=';' read -r f1 f2 f3 f4 _; do
[[ -n "$f1" ]] && vorhanden["$f1;$f2;$f3;$f4"]=1
php fb_tools.php "$BOX" anrufliste "$CALLFILE" -cm &>/dev/null
while IFS=';' read -r f1 f2 f3 f4 f5 f6 f7 f8; do
if [[ "$f3" == *"Anschluss:"* ]]; then
# Ortsnetzvorwahl ergänzen
[[ "$f4" != 0* ]] && f4="${DEFAULT_VORWAHL}${f4}"
local key="$f1;$f2;$f3;$f4"
if [[ -z "${vorhanden[$key]}" ]]; then
echo "$f1;$f2;$f3;$f4;$f5;$f6;$f7;$f8" >> "$INPUT"
done < <(tr -d '\r' < "$CALLFILE")
local ges=$(cat "$INPUT" | wc -l)
echo "$(date): Hinzugefügt: $added | Bearbeitet: $total | Gesamt_jetzt: $ges"
# Ort oder Vorwahl zu Ort [PLZ]
local datei="vorwahlen.csv"
if [[ "$suchbegriff" =~ ^0 ]]; then
grep -m 1 "^$suchbegriff," "$datei" | cut -d',' -f2,3 | sed 's/\(.*\),\(.*\)/\1 [\2]/'
grep -i -m 1 "$suchbegriff" "$datei" | cut -d',' -f2,3 | sed 's/\(.*\),\(.*\)/\1 [\2]/'
# Analyse + Summenbildung + Ort/Name
echo "Nummer;Eingehend;Ausgehend;Ort;Name;Summe;" > "$TEMP_OUT"
grep "^[io]" "$INPUT" | cut -d';' -f4 | sort -u | while read -r nr; do
local eingehend ausgehend sum name ort new_ort
eingehend=$(grep -c "^in;.*;$nr;" "$INPUT")
ausgehend=$(grep -c "^out;.*;$nr;" "$INPUT")
sum=$((eingehend + ausgehend))
lines=$(grep ";$nr;" "$INPUT")
name=$(echo "$lines" | cut -d';' -f3 | grep -v "^[0-9]" | grep -v "^$" | tail -1)
ort=$(echo "$lines" | cut -d';' -f5 | grep -v "^$" | tail -1)
if echo "$nr" | grep -Eq '^(?:\+49|0049|0)1[5-7][0-9]{7,}$'; then
elif [[ -z "$ort" ]]; then
if [[ "$ort" != *"["* ]]; then
new_ort=$(such_ort "$ort")
[[ -n "$new_ort" ]] && ort="$new_ort"
echo "$nr;$eingehend;$ausgehend;$ort;$name;$sum;" >> "$TEMP_OUT"
tail -n +2 "$TEMP_OUT" | sort -t';' -k6,6nr
echo "<html lang=\"de\"><head><meta charset=\"UTF-8\"><title>Auswertung</title>"
body { font-family: sans-serif; padding: 20px; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ccc; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
tr:nth-child(even) { background-color: #f9f9f9; }
echo "<h1>Auswertung der Anrufliste</h1><table>"
for(i=1;i<=NF;i++) printf "<th>%s</th>", $i;
for(i=1;i<=NF;i++) printf "<td>%s</td>", $i;
echo "</table></body></html>"
echo " - CSV: $FINAL_OUT"
echo " - HTML: $HTML_OUT"
Alles anzeigen