65 lines
No EOL
1.9 KiB
Bash
Executable file
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" |