GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Komma zwischen den Anführungszeichen nur in einer kommagetrennten Datei entfernen?

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 } .


Linux
  1. Bash-Skript zum Entfernen der ältesten Datei aus einem Ordner?

  2. Der Unterschied zwischen symbolischen und harten Links?

  3. Wie entferne ich die Bom aus einer UTF-8-Datei?

  4. Was ist der Unterschied zwischen Print und Printf in Awk?

  5. Was sind die Unterschiede zwischen grep, awk und sed?

Zsync – Ein Dateiübertragungsprogramm, um nur die neuen Teile einer Datei herunterzuladen

diff, um nur die Dateinamen auszugeben

Was ist der Unterschied zwischen fsync und syncfs?

Entfernen Sie eine Datei unter Linux mithilfe der Inode-Nummer

Bash-Skript zum Entfernen der ältesten Datei aus einem Ordner

Grep in einer riesigen Logdatei (>14 GB) nur die letzten x GB?