Devo gestire file di testo in formato molto grande (oltre 10 gigabyte, sì, so che dipende da cosa dovremmo chiamare grande), con linee molto lunghe.ottimizzazione sed (grande modifica di file basata su set di dati più piccoli)
L'attività più recente riguarda alcune modifiche di riga in base ai dati di un altro file.
Il file di dati (che dovrebbe essere modificato) contiene 1500000 linee, ognuna delle quali è ad es. Lungo 800 caratteri. Ogni riga è univoca e contiene un solo numero identificativo, ogni numero di identità è univoco)
Il file di modifica è ad esempio. 1800 righe, contiene un numero identificativo e una quantità e una data che dovrebbero essere modificate nel file di dati.
Ho appena trasformato (con Vim regex) il file di modifica in sed, ma è molto inefficiente.
Diciamo che ho una linea come questa nel file di dati:
(some 500 character)id_number(some 300 character)
E ho bisogno di modificare i dati nella parte 300 char.
Sulla base del file di modificatore, ho messo a punto linee sed come questo:
/id_number/ s/^\(.\{650\}\).\{20\}/\1CHANGED_AMOUNT_AND_DATA/
così ho 1800 linee come questo.
Ma so, che anche su un server molto veloce, se faccio un
sed -i.bak -f modifier.sed data.file
'molto lento, perché deve leggere ogni modello x ogni linea.
Non c'è un modo migliore?
Nota: Non sono un programmatore, non ho mai imparato (a scuola) sugli algoritmi. Posso usare awk, sed, una versione obsoleta di perl sul server.
Qual è la versione per il Perl? –
perl 5.8.6 i586-linux-thread-multi –
Quella * è * una versione perl obsoleta, ma sospetto che non sia così grave come la gente avrebbe concluso dalla nota;) – user55400