2017-03-07 4 views
1

Ich habe gerade eine Datenerfassung in eine CSV-Datei gemacht, aber die Kommata fehlen. Bis auf die Art der Daten scheint es eine ziemlich einfache Aufgabe zu sein, sie mit den richtigen Tools wieder hinzuzufügen.Wie füge ich Kommas in eine Datei ein, um daraus eine CSV zu machen?

Ich habe das Gefühl, dass awk, sed, oder ähnliches könnte nützlich sein, aber ich bin mir nicht ganz sicher, wie Sie sie am besten anwenden.

Hier ist ein Ausschnitt der Daten:

17-03-07 20:45:56.400-1.0040.00 
17-03-07 20:45:56.5003.1040.00 
17-03-07 20:45:56.6002612.0039.50 
17-03-07 20:45:56.7002611.0839.00 

Und hier ist, wie es aussehen sollte:

17-03-07 20:45:56.400,-1.00,40.00 
17-03-07 20:45:56.500,3.10,40.00 
17-03-07 20:45:56.600,2612.00,39.50 
17-03-07 20:45:56.700,2611.08,39.00 

Die Einsatzregeln sind einfach:

  • Es gibt drei Spalten
  • Fügen Sie ein Komma nach Zeichen 21 (nach der 3. Dezimalstelle) ein ce Sekunden)
  • hinzufügen Komma 5 Zeichen vor dem Ende jeder Zeile (nur die mittlere Spalte mit variabler Länge

Aber wie sie am besten für 1000e Linien zu automatisieren?

Antwort

1

Die Lösung sed Stream-Editor mit spezifischen RegexMuster mit:

sed -Ei 's/^(.{21})(.+)(.{6})$/\1,\2,\3/' testfile 

Optionen:

-E Option ermöglicht erweiterte reguläre Ausdrücke

-i Option ermöglicht Modifizieren (performing Ersatz) die Datei an Ort und Stelle


Regexp Muster Bestandteile:

(.{21}) - die erste Erfassungsgruppe für die ersten 21 Zeichen

(.+) - die zweite Erfassungsgruppe für die mittleren Spalte variabler Länge

(.{6}) - die dritte Erfassungsgruppe für die letzte Spalte von 5 Zeichen

+1

@ EdMorton, ok, bearbeitet – RomanPerekhrest

1

awk zur Rettung!

awk ' {a[1]=0; a[2]=21; a[3]=length($0)-5; 
     for(i=1;i<length(a);i++) printf "%s,",substr($0,a[i]+1,a[i+1]-a[i]); 
     printf "%s\n",substr($0,a[i]+1)}' file 

kann auf mehr Haltepunkte erweitert werden, indem a Punkte Array hinzuzufügen.

0
awk '{sub(/00/,"00,")sub(/.{5}$/,",&")}1' file 

17-03-07 20:45:56.400,-1.00,40.00 
17-03-07 20:45:56.500,3.10,40.00 
17-03-07 20:45:56.600,2612.00,39.50 
17-03-07 20:45:56.700,2611.08,39.00 
Verwandte Themen