>La mia esigenza era (era perché ho già risolto per questo caso) quella di
>elaborare un grosso file di testo contenente righe lunghissime.
...
>Mi sono fatto uno script che faceva questo, ma mi sono accorto che dovevo
>lasciare acceso il PC qualche giorno (probabilmente 3-4 giorni)
...
>Quello che ho fatto io è molto semplice, ho configurato il numero di righe
>da trattare ad ogni step, salvato il risultato di ogni step in un file
>diverso e salvato lo step attuale in un file.
>Se interrompo l'esecuzione, allora riparte dallo step attuale
>sovrascrivendo quanto avevo già fatto la volta precedente sul file dedicato
>a quello step.
>Alla fine tutti i file elaborati vengono concatenati ottenendo così il
>risultato voluto.

Hai usato il metodo classico per affrontare questo problema.

>Ho usato sed per prendere solo l'intervallo di righe attuali. Questo non
>è certamente ottimale, anzi è lentissimo su file di queste dimensioni.
>Ottimale sarebbe stato farsi un programma in C/C++ o simile dove salvarsi
>la posizione del file e ripartire esattamente da quella,

Non credo che tu possa fare velocemente di meglio.  Sed è estremamente 
efficiente, in generale, se lo usi correttamente.

E il metodo che dici butta via al massimo una sezione del file una volta al 
giorno.  Basta che le sezioni dei file siano ragionevolmente piccole (per 
esempio ne puoi elaborare 1000 al giorno) e il tempo sprecato è trascurabile.

Guarda le GNU coreutils, per esempio Split e Csplit, ma potresti trovare anche 
altro che fa al caso tuo.  In particolare, se usi Split e Csplit e ammesso che 
la tua elaborazione lo consenta, puoi facilmente parallelizzare le operazioni 
su diversi pezzi.

-- fp

Rispondere a