On 08/02/15 02:08, MaX wrote:
caio a tutti,
ho un grosso file csv a cui sto cambiando alcune parti di testo con
sed... ma la faccenda tira per le lunghe e i chiedevo se non ci fosse
un sistema più veloce.
praticamente lo script fa questo:
-------------------------------------
for A in `cat lista`; do
prima=$(echo $A | cut -d ',' -f1)
dopo=$(echo $A | cut -d ',' -f2)
cat file.csv | sed "s/$prima/$dopo/g" > file.csv.tmp
mv file.csv.tmp file.csv
done
--------------------------------------
...dimenticavo... le parti da cambiare possono essere ripetute in
varie parti del file.
il file è troppo grande per caricarlo in RAM, al che mi chiedevo se
non esistesse un metodo più veloce per ottenere lo stesso risultato.
ciao,
MaX
Se il collo di bottiglia si trova nella lettura/scrittura del file,
forse limitandola ad una volta si riesce ad avere un miglioramento:
#!/bin/bash
: >comandi #creo o riduco a zero la dimensione del file comandi
while read prima dopo resto; do
echo "s/$prima/$dopo/g;" >>comandi
done <lista
sed -f comandi file.csv >file.csv.tmp
mv file.csv.tmp file.csv
(con l'opzione -i di GNU sed puoi automatizzare la creazione del file
temporaneo ma non dovrebbe cambiare niente in termini di velocità)
--
Kind regards,
Marco Romano
--
Per REVOCARE l'iscrizione alla lista, inviare un email a
debian-italian-requ...@lists.debian.org con oggetto "unsubscribe". Per
problemi inviare un email in INGLESE a listmas...@lists.debian.org
To UNSUBSCRIBE, email to debian-italian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/54d71dd5.90...@gmail.com