Ich möchte Daten zwischen „ “ aus einer Datendatei mit Trennzeichen als Komma extrahieren.
Beispiel-Eingabedatei:
,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,"10,000",8/13/2019,
Erwartet o/p:
,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,"10000",8/13/2019,
Akzeptierte Antwort:
Unter der Annahme, dass es sich um richtig formatierte CSV-Dateien handelt (die Beispieldaten sehen in dieser Hinsicht in Ordnung aus), können wir csvformat
verwenden aus csvkit
um die Feldbegrenzer vorübergehend in ein anderes Zeichen zu ändern, das ansonsten nicht in den Daten vorhanden ist, wie z. B. @
, löschen Sie alle Kommas und setzen Sie das Feldtrennzeichen wieder auf den Standard zurück:
$ csvformat -D '@' file.csv | tr -d , | csvformat -d '@'
,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,10000,8/13/2019,
Die Ausgabe enthält keine Anführungszeichen um das Feld, das wir geändert haben, aber das liegt daran, dass es nicht mehr benötigt wird.
Offensichtlich kann das „Löschen aller Kommas“ Kommas löschen, die wir eigentlich nicht löschen wollen, also können wir etwas selektiver sein und nur die Kommas im 7. Feld löschen:
$ csvformat -D '@' file.csv | awk -F '@' 'BEGIN { OFS=FS } { gsub(",", "", $7); print }' | csvformat -d '@'
,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,10000,8/13/2019,