Můj obrovský (až 2 GiB) textový soubor obsahuje asi 100 přesných duplikátů každého řádku v něm (v mém případě k ničemu, protože soubor je datová tabulka podobná CSV).
Potřebuji odstranit všechna opakování a přitom (nejlépe, ale to lze obětovat pro výrazné zvýšení výkonu) zachovat původní pořadí sekvence. Ve výsledku musí být každý řádek jedinečný. Pokud tam bylo 100 stejných řádků (obvykle jsou duplikáty rozprostřeny po souboru a nebudou sousedy), zbývá pouze jeden z tohoto druhu.
Napsal jsem program ve Scale (uvažujte o Javě, pokud o Scale nevíte), abych to implementoval. Ale možná existují rychlejší nativní nástroje napsané v C, které to dokážou rychleji?
AKTUALIZACE:awk '!seen[$0]++' filename
Zdálo se, že řešení pro mě funguje dobře, pokud byly soubory blízko 2 GiB nebo menší, ale teď, když chci vyčistit soubor 8 GiB, už to nefunguje. Zdá se, že nekonečno na Macu se 4 GiB RAM a 64bitovém Windows 7 PC se 4 GiB RAM a 6 GiB swap právě dochází paměť. A vzhledem k této zkušenosti nejsem nadšený z toho, že to zkusím na Linuxu se 4 GiB RAM.
Přijatá odpověď:
awk
řešení viděné na #bash (Freenode):
awk '!seen[$0]++' filename