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

  1. Erstelle eine eigene Logdatei events.log mit gemischten Einträgen (INFO/ERROR, verschiedene User).
  2. Entferne Kommentare und Zeitstempel mit sed.
  3. Zähle mit awk die Anzahl aller ERRORs.
  4. Erstelle mit awk eine Statistik, wie viele Aktionen pro User vorkommen.
  5. 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