11 Stimmen

Verwenden Sie sed oder awk, um das Datumsformat zu korrigieren

Ich versuche, eine HTML-Datei mit einer Tabelle mithilfe eines bash-Skripts in eine .csv-Datei umzuwandeln.

Bisher habe ich die folgenden Schritte abgeschlossen:

  1. In Unix-Format konvertieren (mit dos2unix)
  2. Alle Leerzeichen und Tabs entfernen (mit sed 's/[ \t]//g')
  3. Alle leeren Zeilen entfernen (mit sed ':a;N;$!ba;s/\n//g') (das ist notwendig, da die HTML-Datei für jede Zelle der Tabelle eine leere Zeile hat... das ist nicht meine Schuld)
  4. Die unnötigen und Tags entfernen (mit sed 's///g')
  5. durch ',' ersetzen (mit sed 's/<\/td/,/g')
  6. durch Zeilenumbrüche (\n) ersetzen (mit sed 's/<\/tr/\n/g')

Natürlich führe ich all dies in einer Pipeline aus. Bisher funktioniert es gut. Es gibt einen letzten Schritt, bei dem ich stecken geblieben bin: Die Tabelle enthält eine Spalte mit Datumsangaben im Format dd/mm/yyyy, und ich möchte sie in yyyy-mm-dd umwandeln.

Gibt es einen (einfachen) Weg, dies zu tun (mit sed oder awk)?

Datenbeispiel (nach dem gesamten sed-Befehl):

500,2,13/09/2007,30000.00,12,B-1
501,2,15/09/2007,14000.00,8,B-2

Ergebnis:

500,2,2007-09-13,30000.00,12,B-1
501,2,2007-09-15,14000.00,8,B-2

Der Grund, warum ich das tun muss, ist, dass ich diese Daten in MySQL importieren muss. Ich könnte die Datei in Excel öffnen und das Format manuell ändern, aber ich würde das gerne überspringen.

2voto

user3489631 Punkte 21

Korrektur zu awk, nehmen wir an, du suchst yyyy-mm-dd (nicht yyyy-dd-mm)

echo 08/26/2013 | awk -F/ '{printf "%s-%s-%s\n",$3,$1,$2}'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X