Rlieh

In girum imus nocte ecce et consumimur ignI

Lavorare su grossi file di testo

Quando devi migrare un database da un dbms ad un altro o esistono dei tool fatti e testati che fanno questo lavoro, oppure te li crei oppure ti esporti tutto in un bel file sql corposo e cerchi di ricaricare i vecchi dati sulle tabelle nuove.
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.

abdul

Abdul Alhazared, a.k.a. Al Azif, ha circa 1000 anni e gironzola su vari piani dell'esistenza. Dopo aver scritto il Necronomicon si è dedicato alla tecnologia e alla scienza, muovendosi di tanto in tanto in Europa.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Torna in alto