Mój ogromny plik tekstowy (do 2 GiB) zawiera około 100 dokładnych duplikatów każdego wiersza w nim (w moim przypadku jest to bezużyteczne, ponieważ jest to tabela danych podobna do CSV).
To, czego potrzebuję, to usunięcie wszystkich powtórzeń, podczas gdy (najlepiej, ale można to poświęcić w celu znacznego zwiększenia wydajności) przy zachowaniu oryginalnej kolejności sekwencji. W rezultacie każda linia ma być unikalna. Jeśli było 100 równych wierszy (zwykle duplikaty są rozłożone w pliku i nie będą sąsiadami), pozostanie tylko jeden taki rodzaj.
Napisałem program w Scali (rozważ to Java, jeśli nie wiesz o Scali), aby to zaimplementować. Ale może są szybsze natywne narzędzia napisane w C, które mogą to zrobić szybciej?
AKTUALIZACJA: awk '!seen[$0]++' filename
rozwiązanie wydawało się działać dobrze dla mnie, dopóki pliki były w pobliżu 2 GiB lub mniejszych, ale teraz, gdy mam wyczyścić plik 8 GiB, to już nie działa. Wydaje się, że zabiera nieskończoność na komputerze Mac z 4 GiB RAM i 64-bitowym Windows 7 PC z 4 GiB RAM i 6 GiB swap po prostu kończy się pamięć. I nie czuję entuzjazmu, próbując tego na Linuksie z 4 GiB RAM biorąc pod uwagę to doświadczenie.
sort -u
prawdopodobnie będzie szybszy.