Sto provando a convertire un HTML contenente una tabella in un file .csv utilizzando uno script bash
.Utilizzare sed o awk per fissare il formato data
Finora ho acomplished le seguenti operazioni:
- Converti in formato Unix (con
dos2unix
) - Rimuovere tutti gli spazi e tabulazioni (con
sed 's/[ \t]//g'
) - rimuovere tutte le righe vuote (con
sed ':a;N;$!ba;s/\n//g'
) (questo è necessario, perché il file HTML ha una riga vuota per ogni cella della tabella ... non è colpa mia) - Rimuovere i tag
<td>
e<tr>
non necessari (consed 's/<t.>//g'
) - Sostituire
</td>
con '' (consed 's/<\/td/,/g'
) - Sostituire
</tr>
con (\n
) caratteri di fine linea (consed 's/<\/tr/\n/g'
)
Naturalmente, sto mettendo tutto questo in una pipeline. Finora, sta funzionando alla grande. C'è un ultimo passaggio in cui sono bloccato: il tavolo ha una colonna con date, che ha il formato dd/mm/yyyy
e mi piacerebbe convertirli in yyyy-mm-dd
.
Esiste un modo (semplice) per farlo (con sed
o awk
)?
campione di dati (dopo tutto sed
pipe): risultato
500,2,13/09/2007,30000.00,12,B-1
501,2,15/09/2007,14000.00,8,B-2
Expected:
500,2,2007-09-13,30000.00,12,B-1
501,2,2007-09-15,14000.00,8,B-2
La ragione per cui ho bisogno di fare questo è perché ho bisogno di importare questi dati a MySQL. Potrei aprire il file in Excel e modificare il formato a mano, ma vorrei saltarlo.
Nice, ma il comando 'read'-based non funzionerà, in quanto' read' viene eseguito in _subshell_ in questo caso; usa 'echo '08/26/2013 '| {IFS =/read m d y; echo "$ {y} - $ {m} - $ {d}"; } 'o ' IFS =/leggi m d y <<< '08/26/2013'; echo "$ {y} - $ {m} - $ {d}" ' – mklement0
@ mklement0 Ah, sì .... ho dimenticato quel piccolo dettaglio. Funzionerebbe in 'ksh', comunque. Un'altra alternativa sarebbe 'IFS =/read m d y <<(echo 08/26/2013)' per evitare la subshell (anche se 'echo' si troverebbe in una subshell). – twalberg
Buoni punti, anche se '<<<' è probabilmente il più efficiente qui. In Bash v4.2 + puoi anche usare 'shopt -s lastpipe' (ma solo negli script). Posso suggerire di aggiornare la risposta con una delle soluzioni operative? – mklement0