Un mio enorme file di testo (fino a 2 GiB) contiene circa 100 duplicati esatti di ogni riga al suo interno (inutile nel mio caso, poiché il file è una tabella di dati simile a CSV).
Quello di cui ho bisogno è rimuovere tutte le ripetizioni mentre (preferibilmente, ma questo può essere sacrificato per un aumento significativo delle prestazioni) mantenendo l'ordine della sequenza originale. Nel risultato ogni linea deve essere unica. Se c'erano 100 righe uguali (di solito i duplicati sono sparsi sul file e non saranno vicini) ne deve essere rimasta solo una 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:il nome del file awk '!seen[$0]++' filename
la soluzione sembrava funzionare bene per me fintanto che i file erano vicini a 2 GiB o più piccoli ma ora, dato che devo ripulire un file da 8 GiB, non funziona più. Sembra che ci voglia l'infinito su un Mac con 4 GiB di RAM e un PC Windows 7 a 64 bit con 4 GiB di RAM e 6 GiB di swap esaurisce la memoria. E non sono entusiasta di provarlo su Linux con 4 GiB di RAM vista questa esperienza.
Risposta accettata:
Un awk
soluzione vista su #bash (Freenode):
awk '!seen[$0]++' filename