Ich versuche, ein HTML, das eine Tabelle enthält, in eine CSV-Datei mit einem bash
Skript zu konvertieren.Verwenden Sie sed oder awk, um das Datumsformat zu beheben
Bisher habe ich acomplished die folgenden Schritte:
- auf Unix-Format konvertieren (mit
dos2unix
) - alle Leerzeichen entfernen und Registerkarten (mit
sed 's/[ \t]//g'
) - Entfernen Sie alle leeren Zeilen (mit
sed ':a;N;$!ba;s/\n//g'
) (Dies ist notwendig, weil die HTML-Datei eine Leerzeile für jede Zelle der Tabelle hat ... das ist nicht meine Schuld) - Entfernen Sie die unnötigen
<td>
und<tr>
Tags (mitsed 's/<t.>//g'
) - ersetzen
</td>
mit '' (mitsed 's/<\/td/,/g'
) - ersetzen
</tr>
mit End-of-line (\n
) Zeichen (mitsed 's/<\/tr/\n/g'
)
Natürlich Ich setze dies alles in eine Pipeline. Bis jetzt funktioniert es großartig. Es gibt einen letzten Schritt, bei dem ich feststecke: Die Tabelle hat eine Spalte mit Daten, die das Format dd/mm/yyyy
hat, und ich möchte sie in yyyy-mm-dd
konvertieren.
Gibt es einen (einfachen) Weg (mit sed
oder awk
)?
Datenabtastblock (nach dem ganzen sed
Rohr):
500,2,13/09/2007,30000.00,12,B-1
501,2,15/09/2007,14000.00,8,B-2
Erwartetes 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 muss das tun, weil ich diese Daten importieren müssen zu MySQL. Ich könnte die Datei in Excel öffnen und das Format von Hand ändern, aber ich möchte das überspringen.
Schön, aber der 'lesen'-basierte Befehl wird nicht funktionieren, weil' read' in diesem Fall in _subshell_ läuft; Verwende 'echo '08/26/2013' | {IFS =/lesen m d y; echo "$ {y} - $ {m} - $ {d}"; } 'oder ' IFS =/lesen m d y <<< '26.08.2013'; echo "$ {y} - $ {m} - $ {d}" ' – mklement0
@ mklement0 Ah, ja .... vergaß dieses kleine Detail. Es würde jedoch in 'ksh' funktionieren. Eine andere Alternative wäre "IFS =/read m dy <<(26.08.2013)", um die Unterschale zu vermeiden (obwohl das "Echo" in einer Unterschale wäre). – twalberg
Gute Punkte, obwohl '<<<' hier wahrscheinlich am effizientesten ist. In Bash v4.2 + können Sie auch 'shopt -s lastpipe' verwenden (aber nur in Skripten). Kann ich vorschlagen, dass Sie Ihre Antwort mit einer der Arbeitslösungen aktualisieren? – mklement0