Ich habe eine durch Kommas getrennte Eingabedatei (,
). Es gibt einige Felder, die in doppelte Anführungszeichen eingeschlossen sind und ein Komma enthalten. Hier ist die Beispielzeile
123,"ABC, DEV 23",345,534.202,NAME
Ich muss alle Kommas entfernen, die innerhalb der doppelten Anführungszeichen und auch der doppelten Anführungszeichen vorkommen. Die obige Zeile sollte also wie unten gezeigt geparst werden
123,ABC DEV 23,345,534.202,NAME
Folgendes habe ich mit sed
versucht aber nicht die erwarteten Ergebnisse.
sed -e 's/(".*),(".*)/1 2/g'
Alle schnellen Tricks mit sed
, awk
oder ein anderes Unix-Dienstprogramm, bitte?
Akzeptierte Antwort:
Wenn die Anführungszeichen ausgeglichen sind, sollten Sie Kommas zwischen allen anderen Anführungszeichen entfernen, dies kann in awk
ausgedrückt werden so:
awk -F'"' -v OFS='' '{ for (i=2; i<=NF; i+=2) gsub(",", "", $i) } 1' infile
Ausgabe:
123,ABC DEV 23,345,534.202,NAME
Erklärung
Das -F"
bewirkt, dass awk die Zeile an den doppelten Anführungszeichen trennt, was bedeutet, dass jedes andere Feld der Text zwischen den Anführungszeichen ist. Die for-Schleife führt gsub
aus , kurz für Global Substitut, ersetzt in jedem anderen Feld das Komma (","
). ) mit nichts (""
). Die 1
am Ende ruft den Standardcodeblock auf:{ print $0 }
.