Systeme erzeugen oft große Logdateien – zum Beispiel Webserver, Datenbanken oder Anwendungen.
Diese Logs enthalten viele Informationen, aber auch viel „Rauschen„, das die Auswertung erschwert.
In diesem Praxisprojekt kombinieren wir sed & awk, um eine Logdatei Schritt für Schritt zu bereinigen und zu analysieren.
🔹 Ausgangsdatei: Beispiel-Log
# Application Log 2025-09-20 10:15:33 [INFO] User=Alice Action=Login 2025-09-20 10:16:01 [ERROR] User=Bob Action=DownloadFailed 2025-09-20 10:16:45 [INFO] User=Charlie Action=Upload 2025-09-20 10:17:22 [ERROR] User=Alice Action=Timeout # End of file
Probleme:
- Kommentare mit
#
sollen ignoriert werden. - Zeilen enthalten unnötige Infos wie Zeitstempel.
- Wir wollen nur User, Aktion und Status (INFO/ERROR) auswerten.
🔹 Schritt 1: Kommentare entfernen (sed)
sed '/^#/d' app.log
Ausgabe:
2025-09-20 10:15:33 [INFO] User=Alice Action=Login 2025-09-20 10:16:01 [ERROR] User=Bob Action=DownloadFailed 2025-09-20 10:16:45 [INFO] User=Charlie Action=Upload 2025-09-20 10:17:22 [ERROR] User=Alice Action=Timeout
👉 Jetzt sind nur die relevanten Einträge übrig.
🔹 Schritt 2: Zeitstempel entfernen (sed)
Wir wollen die Daten auf Status, User, Action reduzieren:
sed '/^#/d; s/^[0-9-]* [0-9:]* //' app.log
Ausgabe:
[INFO] User=Alice Action=Login [ERROR] User=Bob Action=DownloadFailed [INFO] User=Charlie Action=Upload [ERROR] User=Alice Action=Timeout
🔹 Schritt 3: Daten analysieren (awk)
Anzahl der Fehler zählen
sed '/^#/d; s/^[0-9-]* [0-9:]* //' app.log | awk '$1=="[ERROR]" {count++} END {print "Fehler:", count}'
Ausgabe:
Fehler: 2
Welche User hatten Fehler?
sed '/^#/d; s/^[0-9-]* [0-9:]* //' app.log | awk '$1=="[ERROR]" {print $2}'
Ausgabe:
User=Bob User=Alice
🔹 Schritt 4: Aktionen pro User zählen
sed '/^#/d; s/^[0-9-]* [0-9:]* //' app.log | awk -F' ' '{actions[$2]++} END {for (u in actions) print u, actions[u]}'
Ausgabe:
User=Alice 2 User=Charlie 1 User=Bob 1
👉 awk baut hier ein Array actions[]
auf und zählt die Aktionen pro Nutzer.
🔹 Bonus: Nur Aktionen extrahieren
sed '/^#/d; s/^[0-9-]* [0-9:]* //' app.log | awk '{print $3}'
Ausgabe:
Action=Login Action=DownloadFailed Action=Upload Action=Timeout
👉 Damit bekommst du eine Liste aller Aktionen.
🔹 Übung
- Erstelle eine eigene Logdatei
events.log
mit gemischten Einträgen (INFO/ERROR, verschiedene User). - Entferne Kommentare und Zeitstempel mit sed.
- Zähle mit awk die Anzahl aller ERRORs.
- Erstelle mit awk eine Statistik, wie viele Aktionen pro User vorkommen.
- Bonus: Gib nur die fehlerhaften Aktionen (ERRORs) pro User aus.
✅ Zusammenfassung
- Mit sed kannst du Logs schnell bereinigen (Kommentare, Zeitstempel, unnötige Teile entfernen).
- Mit awk kannst du die bereinigten Daten analysieren (zählen, filtern, Statistiken).
- Gemeinsam sind sed & awk ideal für Logdateianalyse und Monitoring.
- Dieses Praxisprojekt zeigt, wie nah die Kombination an echten Admin-Aufgaben ist.
👉 Im letzten Bonus-Artikel (Bonus 5) schauen wir uns Profi-Tricks mit regulären Ausdrücken an, die sed & awk gemeinsam zu noch mächtigeren Tools machen.
📚 Inhaltsverzeichnis
👉 awk Kapitel 1: Felder & Zeilen verstehen
👉 awk Kapitel 2: Muster & Bedingungen in awk
👉 awk Kapitel 3: Textbearbeitung & Formatierung mit awk
👉 awk Kapitel 4: Berechnungen & Statistiken mit awk
👉 awk Kapitel 5: Eigene awk-Skripte schreiben
👉 awk Kapitel 6: Praxisprojekt – Webserver-Logs analysieren mit awk
⭐ Bonus-Kapitel
👉 awk Bonus 1: Unterschiede & Gemeinsamkeiten von sed und awk
👉 awk Bonus 2: Textbereinigung mit sed, Datenanalyse mit awk
👉 awk Bonus 3: Kombinieren in einer Pipeline – sed & awk zusammen einsetzen
👉 awk Bonus 4: Praxisprojekt – Logdateien filtern, bereinigen und auswerten
👉 awk Bonus 5: Profi-Tricks – Reguläre Ausdrücke für sed & awk im Zusammenspiel