Nel caso recente, un db con 25milioni di record su PostGres da migrare a Mysql, dumpato in plaintext sql ha generato un file di 2.4GB e spicci.
Problema: una volta creato il file sql scopri che alcune righe all'inizio del file generano errori e bloccano l'importazione. Che fare? Se hai a disposizione una shell Unix-like:
- giochi con tail/awk
- provi ad editare con vi il file e salvarlo
- (cosa che mi sembrava più utile) splitti il file in file più piccoli da 500k righe l'uno e poi editi il primo
Su Windows le cose sono naturalmente più fastidiose:
ho sempre usato editor di testo derivanti dalle librerie Scintilla (SciTe ed Notepad++ in primis), sono belle potenti ma hanno il bruttissimo difetto di diventare praticamente inutili quando si trovano di fronte file grossi.
Update 1: mi è venuto in mente che in realtà per Windows Server esiste un resource kit contenente il tail.
Oppure si può usare il comando more +numero_di_righe.
Resta il fatto che non esiste il comando split nativo, bisogna giocare con il rognoso FOR di DOS.
Soluzione commerciale il caro vecchio UltraEdit, che è a pagamento ma devo dire, non mi ha mai deluso.
Cercando su Stackoverflow ho poi trovato una chicca: TheGun un vecchio editor scritto in assembler e il suo successore, TopGun
Il primo è riuscito ad aprire il file ma aveva problemi nel modificarlo, il secondo ha aperto il file e mi ha permesso di modificarlo come UltraEdit.
Ora, naturalmente in quesot caso si lavorava a bocce ferme e mi sto iniziando a studiare il funziamento degli ETL con Pentaho, perchè non ho a disposizione SSIS di Microsoft, ma la curiosità mi è rimasta.
Quali consigli avete per editare GROSSI file di testo? Script/linguaggi/editor, qualsiasi suggerimento è gradito.
Mi tocca persino aggirare Disqus per poter commentare.
RispondiEliminaComunque scarichi vim per Windows ed hai risolto il problema. Oppure sed/grep e tutto li resto, comodamente compilati per win32.
O ti installi un linguaggio rapido, ad esempio python, e prepare tre righe di script che facciano il lavoro che ti serve.