GNU/Linux >> Znalost Linux >  >> Linux

Jak odstranit duplicitní řádky uvnitř textového souboru?

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

Linux
  1. 7 Příklady příkazů Linux Uniq k odstranění duplicitních řádků ze souboru

  2. Jak odstranit duplicitní slova ze souboru prostého textu pomocí příkazu linux

  3. Jak odstraním nové řádky z textového souboru?

  1. Jak použít sed k odstranění posledních n řádků souboru

  2. Jak připojím text k souboru?

  3. Jak zkrátit soubor podle řádků?

  1. Jak mohu kat soubor a odstranit komentované řádky?

  2. Jak odstranit soubor bez použití rm?

  3. Jak zobrazit určité řádky z textového souboru v Linuxu?