Portál AbcLinuxu, 12. května 2025 07:52
Řešení dotazu:
uniq -c
– ovšem silně pochybuju o tom, že si s tím uniq
jen tak z ničeho nic efektivně poradí.
Tedy na konci zpracování budete mít vstupní soubory a výstupní soubor, potřebujete tedy celkovou kapacitu úložného zařízení na dvojnásobek dat.Obecně více než na dvojnásobek objemu výstupních dat, protože opakování v každé komponentě je menší než ve sloučeném výstupu. No a? Ke každé komponentě se po setřídění přistupuje sekvenčně a výsledek se též dostává sekvenčně a již setříděný, takže je klidně budu tahat rourou přes ssh a vypisovat výsledek zrovna tak, když na to přijde... Je to jedno, toto není ta obtížná část.
mkdir parts split -l 10000 big-file parts/ for i in parts/*; do sort $i > $i-s; donepokračujme napr takto:
sort --merge parts/*-s > big-file-sorteda dokončime
uniq -c big-file-sorted
sort
od určité velikosti dat dělá to samé.
Dobry den.
Mam hotovy kod, ktery je schopen cist data ze stdin a rovnou online radit do binarniho stromu. To znamena, ze nemusim mit cela data v pameti (tedy pokud je tam dostatek shod).
Mel jsem to pustene na logy, ktere pribyvali radove v tisicich radku za secundu.
Pokud se radky casto opakovaly, pak to bylo v pohode zvladnutelne.
Je to napsano v C, vicevlaknove:
Prvni vlakno nacita z stdin, predava do bufferu.
Druhe vlakno bere z bufferu a uklada do stromu.
Treti vlakno vyhodnocuje strom a obcas ho zoptimalizuje.
Pak je tam jeste neco na prubezny vypis.
Muzu nabidnout zdrojove kody (v C bezne nepisu, takze stabni kultura nic moc...)
Marek
Jak se takové věci normálně dělaj?Nejjednodušší bude soubor setřídit třeba příkazem sort, a pak to spočítat. Asi rychlejší bude použít hašování a v hašovací tabulce si ukládat počty výskytů (je třeba počítat s tím, že jedno počítadlo může být společné pro více řádků).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.