Un mio enorme file di testo (fino a 2 GiB) contiene circa 100 duplicati esatti di ogni riga (inutile nel mio caso, poiché il file è una tabella di dati simile a CSV).
Ciò di cui ho bisogno è di rimuovere tutte le ripetizioni mentre (preferibilmente, ma questo può essere sacrificato per un significativo aumento delle prestazioni) mantenendo l'ordine originale della sequenza. Nel risultato ogni riga deve essere unica. Se ci fossero 100 linee uguali (di solito i duplicati sono distribuiti nel file e non saranno vicini), ne rimarrà solo uno del tipo.
Ho scritto un programma in Scala (consideralo Java se non conosci Scala) per implementarlo. Ma forse ci sono strumenti nativi scritti in C più veloci in grado di farlo più velocemente?
AGGIORNAMENTO: la awk '!seen[$0]++' filename
soluzione sembrava funzionare bene per me fintanto che i file erano vicini a 2 GiB o più piccoli, ma ora come sto per ripulire un file da 8 GiB non funziona più. Sembra che l'infinito su un Mac con 4 GB di RAM e un PC Windows 7 a 64 bit con 4 GB di RAM e 6 GB di memoria si esaurisca. E non mi sento entusiasta di provarlo su Linux con 4 GB di RAM data questa esperienza.
sort -u
probabilmente sarà più veloce.