office-dynamixs-ai/docker/import_examples/csv_clean.sh
2025-06-04 21:48:02 +02:00

65 lines
No EOL
1.9 KiB
Bash
Executable file

#!/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"