Integration von Sed, Awk und Shell Scripting: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: „= Integration von Sed und Awk in Shell-Skripte = == Einführung == Die wahre Stärke von Sed und Awk zeigt sich in ihrer Integration in Shell-Skripte. Durch K…“) |
|||
| Zeile 239: | Zeile 239: | ||
* Komplexe Awk-Skripte in separate Dateien auslagern | * Komplexe Awk-Skripte in separate Dateien auslagern | ||
* Immer Eingabedateien auf Existenz prüfen | * Immer Eingabedateien auf Existenz prüfen | ||
| − | |||
Aktuelle Version vom 18. Oktober 2025, 08:37 Uhr
Integration von Sed und Awk in Shell-Skripte
Einführung
Die wahre Stärke von Sed und Awk zeigt sich in ihrer Integration in Shell-Skripte. Durch Kombination können komplexe Textverarbeitungsaufgaben automatisiert werden.
Grundlegende Integration
Variablen in Sed und Awk verwenden
#!/bin/bash
# integration_beispiel.sh
DATEI="daten.txt"
ALT_TEXT="error"
NEU_TEXT="WARNING"
# Sed mit Shell-Variablen
sed "s/${ALT_TEXT}/${NEU_TEXT}/g" "$DATEI"
# Awk mit Shell-Variablen über -v
MIN_WERT=100
awk -v min=$MIN_WERT '$3 > min {print $1, $3}' "$DATEI"
Kommandosubstitution
#!/bin/bash
# kommando_substitution.sh
# Ergebnis von Sed/Awk in Variable speichern
ANZAHL=$(awk '/ERROR/ {count++} END {print count}' logfile.txt)
ZEILEN=$(sed -n '10,20p' config.txt)
echo "Fehleranzahl: $ANZAHL"
echo "Zeilen 10-20:"
echo "$ZEILEN"
Praktische Anwendungsfälle
Logfile-Analyse
#!/bin/bash
# log_analyzer.sh
LOGFILE="$1"
DATUM=$(date +"%Y-%m-%d")
# Fehler und Warnungen extrahieren
awk -v datum="$DATUM" '
/ERROR/ || /WARN/ {
print datum " - " $0
}' "$LOGFILE" > "fehler_${DATUM}.log"
# Statistik erstellen
echo "=== Log-Analyse vom $DATUM ==="
echo "ERRORs: $(grep -c "ERROR" "$LOGFILE")"
echo "WARNINGS: $(grep -c "WARN" "$LOGFILE")"
Konfigurationsdatei bearbeiten
#!/bin/bash
# config_updater.sh
CONFIG="app.conf"
BACKUP="${CONFIG}.backup"
# Backup erstellen
cp "$CONFIG" "$BACKUP"
# Mehrere Änderungen mit Sed
sed -i \
-e 's/^debug.*/debug=true/' \
-e 's/^port.*/port=8080/' \
-e '/^#.*test/d' \
"$CONFIG"
echo "Konfiguration aktualisiert. Backup: $BACKUP"
CSV-Daten verarbeiten
#!/bin/bash
# csv_processor.sh
CSV_FILE="daten.csv"
AUSGABE="bericht.txt"
# Kopfzeile und Daten verarbeiten
{
echo "=== Datenbericht ==="
awk -F',' '
NR==1 {print "Kopfzeile:", $0}
NR>1 && $3 > 50 {
summe+=$3
count++
print "Datensatz " NR-1 ": " $1 " - Wert: " $3
}
END {
print "=== Statistik ==="
print "Anzahl Datensätze: " count
print "Durchschnitt: " (summe/count)
}
' "$CSV_FILE"
} > "$AUSGABE"
echo "Bericht erstellt: $AUSGABE"
Kombination in Pipelines
Komplexe Datenverarbeitung
#!/bin/bash
# pipeline_processor.sh
# Logfile analysieren und aufbereiten
cat system.log | \
grep "2024" | \
sed 's/ */ /g' | \
awk '
$5 == "ERROR" { errors++ }
$5 == "WARN" { warnings++ }
END {
print "Errors: " errors
print "Warnings: " warnings
}'
Systemmonitoring
#!/bin/bash
# system_monitor.sh
# Prozessliste analysieren
ps aux | \
awk '
NR>1 {
cpu_sum += $3
mem_sum += $4
prozesse++
}
$3 > 5.0 {
print "CPU-Intensiv: " $11 " (" $3 "%)"
}
END {
print "=== Systemstatistik ==="
print "Prozesse: " prozesse
print "CPU gesamt: " cpu_sum "%"
print "Memory gesamt: " mem_sum "%"
}'
Fehlerbehandlung
Prüfung auf leere Ergebnisse
#!/bin/bash
# safe_processing.sh
ERGEBNIS=$(awk '/SPECIAL_PATTERN/ {print $2}' daten.txt)
if [ -z "$ERGEBNIS" ]; then
echo "Keine Daten gefunden. Verwende Standardwert."
ERGEBNIS="default"
fi
echo "Ergebnis: $ERGEBNIS"
Datei-Existenz prüfen
#!/bin/bash
# file_processor.sh
DATEI="$1"
if [ ! -f "$DATEI" ]; then
echo "Fehler: Datei $DATEI nicht gefunden!" >&2
exit 1
fi
# Verarbeitung nur wenn Datei existiert
awk '{print NR ": " $0}' "$DATEI"
Fortgeschrittene Techniken
Awk-Skripte in separaten Dateien
#!/bin/bash
# external_awk.sh
# komplexes Awk-Skript in separater Datei
AWK_SCRIPT="analyzer.awk"
# analyzer.awk Inhalt:
# /ERROR/ { errors++ }
# /WARN/ { warnings++ }
# END {
# print "Errors: " errors
# print "Warnings: " warnings
# }
awk -f "$AWK_SCRIPT" logfile.txt
Sed mit komplexen Mustern
#!/bin/bash
# advanced_sed.sh
# Mehrstufige Verarbeitung
INPUT_FILE="$1"
# 1. Kommentare entfernen
# 2. Leerzeilen entfernen
# 3. Spezielle Markierungen ersetzen
sed -e '/^#/d' \
-e '/^$/d' \
-e 's/\[TIMESTAMP\]/'"$(date +"%Y-%m-%d")"'/g' \
"$INPUT_FILE"
Aufgaben
- Erstelle ein Skript, das eine Logdatei analysiert und eine Zusammenfassung der Fehlertypen erstellt
- Schreibe ein Konfigurations-Update-Skript, das mehrere Parameter akzeptiert
- Kombiniere Sed und Awk in einer Pipeline zur Systemanalyse
- Implementiere Fehlerbehandlung für nicht-existente Dateien
- Erstelle ein CSV-Reporting-Skript mit formatierter Ausgabe
Hinweise
- Verwende immer Quotes um Variablen in Sed/Awk
- Bei -i Option mit Sed immer Backup erstellen
- Awk's -v Option für sichere Variablenübergabe nutzen
- Komplexe Awk-Skripte in separate Dateien auslagern
- Immer Eingabedateien auf Existenz prüfen