Integration von Sed, Awk und Shell Scripting

Aus Xinux Wiki
Version vom 18. Oktober 2025, 08:36 Uhr von Thomas.will (Diskussion | Beiträge) (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…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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

</syntaxhighlight>