#!/bin/bash # Überprüfen, ob eine Eingabedatei angegeben wurde if [ $# -ne 1 ]; then echo "Verwendung: $0 input.csv" exit 1 fi input_file="$1" output_file="${input_file%.*}_clean.csv" # Temporäre Datei für die Verarbeitung temp_file=$(mktemp) # Verarbeitung: # 1. Zuerst alle echten Zeilenumbrüche (die nicht in Anführungszeichen sind) markieren # 2. Dann Newlines innerhalb von Anführungszeichen durch Leerzeichen ersetzen # 3. HTML-Tags entfernen # 4. Markierte Zeilenumbrüche wiederherstellen awk ' BEGIN { FPAT = "([^;]*)|(\"[^\"]+\")"; OFS=";"; in_quotes=0 } { # Zeilen zusammenfügen, wenn sie unvollständig sind (nur für Sicherheit) if (NR == 1) { full_line = $0 } else { full_line = full_line " " $0 } # Überprüfen, ob die Zeile vollständig ist (gleich viele öffnende und schließende Anführungszeichen) quotes = gsub(/"/, "&", full_line) if (quotes % 2 == 0) { # Zeile ist vollständig, jetzt verarbeiten $0 = full_line # Newlines in jedem Feld durch Leerzeichen ersetzen for (i=1; i<=NF; i++) { # HTML-Tags entfernen gsub(/<[^>]*>/, "", $i) # Newlines und mehrfache Leerzeichen bereinigen gsub(/\n/, " ", $i) gsub(/ +/, " ", $i) # Feld trimmen sub(/^[ \t]+/, "", $i) sub(/[ \t]+$/, "", $i) # Feld wieder in Anführungszeichen setzen, wenn es Semikolons oder Anführungszeichen enthält if (($i ~ /;/ || $i ~ /"/) && $i !~ /^".*"$/) { gsub(/"/, "\"\"", $i) # Escape existing quotes $i = "\"" $i "\"" } } print full_line = "" } }' "$input_file" > "$temp_file" # Endgültige Bereinigung mv "$temp_file" "$output_file" echo "Bereinigte Datei wurde erstellt: $output_file"