Rá lehet venni a grep-et (vagy más parancssori szövegpásztázót), hogy logaritmikus kereséssel rágjon át egy nagyobb fájlt?
Egy sor eleji számra szeretnék keresni ^.... módon; a fájl pedig rendezett. Szeretném ezt az infót átadni a grepnek, hogy gyorsabban végezzen.
- 1608 megtekintés
Hozzászólások
Nem, de lehet ilyet írni. Más kérdés, hogy mennyi értelme van...
- A hozzászóláshoz be kell jelentkezni
így egyből azt mondanám hogy ha tudná, akkor is végig kellene olvasnia a fájlt legalább egyszer a sorvégek miatt, lévén nincs index fájl ami alapján tudna ugrálni a sorvégekhez viszonyítva, szóval ha csak egyszer kell, valszeg nem éri meg. ha sokszor, akkor érdemes lenne leprogramozni.
- A hozzászóláshoz be kell jelentkezni
Igazad van; nem úszható meg a végigolvasás. Esetleg, ha meg lehetne adni fix sorhosszat (merthogy esetemben kivételesen az).
- A hozzászóláshoz be kell jelentkezni
Ha nem ékezetes és UTF8-as, akkor blokkonként lehet kezelni, de ez is felvet pár problémát. Viszont megoldható :D
- A hozzászóláshoz be kell jelentkezni
így látatlanban nem hiszem hogy nagy gondot okozna ha nem pontosan ugyanakkora sorhossz (tehát pl utf8 miatt), (ha nagyon pontosan akarnánk ugrálni akkor kellene, keresés gyorsításához elég ha nagyjából ismeri
a grepen vagy hasonlón nagyon meglepődnék ha tudna ilyet, szkriptnyelvvel vegyítve s biztos nem éri meg hacsak nem több száz mega méretről van szó... tehát meg kell írni valamiben, ami tud seek-elni
- A hozzászóláshoz be kell jelentkezni
Latin-2-es ékezetek vannak benne.
Kíváncsivá tettél! Mire gondoltál megoldásként?
- A hozzászóláshoz be kell jelentkezni
tedd bele egy sql-be... igy mint prompt megoldas meg mindig ez a leggyorsabb es legeffektivebb. fel lehet programozni, igen, de az nem ket perc.
- A hozzászóláshoz be kell jelentkezni
persze a feladat ismerete nélkül akár a legjobb megoldás is lehet (akár sqlite akár más)
de ennél is be kell olvasni az egészet legalább egyszer, és ha a fájlra nincs rálátása hogy hogy változik (nem tud legalább egy "tail -f"-el figyelve sql-lel hozzáadni, vagy a benne lévő változásokat még kevésbé látja) akkor a legrosszabb is lehet :)
(tehát ha a fájl változásához képest sokat kell benne ugrálni akkor jó az egyszer beolvasás)
- A hozzászóláshoz be kell jelentkezni
-
- A hozzászóláshoz be kell jelentkezni
Lehet, hogy a 'look' parancsot keresed: man look.
- A hozzászóláshoz be kell jelentkezni
érdemes volt feliratkoznom :)
- A hozzászóláshoz be kell jelentkezni
imádom a unix tool-okat!
+1
- A hozzászóláshoz be kell jelentkezni
+1
--------------------------------------------------------------------------
színes
- A hozzászóláshoz be kell jelentkezni
IGEEEEEN! Az utóbbi időben szinte mindig megjön a tuti válasz itt a HUP-on valakitől. Köszönöm!!! :-)
[Kb. tizedére csökkent így egy szkriptem futási ideje, hogy "grep ^..." helyett "look -b"-t használtam.]
- A hozzászóláshoz be kell jelentkezni
Mindenesetre így mindjárt kaphatunk a forráskódból egy tippet, hogy úszható meg a fájl végigolvasása, az első és talán legsallangmentesebb kód:
http://minnie.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/look.c
Bájt szinten felezgeti a fájlt, majd a felező ponthoz legközelebbi sorvégre ugrik...
Azaz ha sorok méretének összege tartományonként nem kiegyensúlyozott (azaz pl. sorhossz szerint rendezett fájl) akkor romlik a teljesítmény... Pl. ha sorhosszak kettő hatványoknak megfelelően növekednek (1,2,4,8,16...) elveszted a előnyt. ;)
- A hozzászóláshoz be kell jelentkezni
Zseniális! Tetszik, hogy kíváncsi voltál (s hogy utána lehetett nézni), hogy hogyan oldja meg a program a gordiuszi csomót. Éljen a nyílt forráskód!
- A hozzászóláshoz be kell jelentkezni
nem piszkából hanem kíváncsiságból: mi a zseniális?
a logaritmikus keresés alatt mit értettél ha nem ezt? vagy az a zseniális hogy nem ismert hosszú rekordokkal dolgozik hanem feltételezi hogy közel azonos hosszúak (a legközelebbi sorvégre ugrik(?
- A hozzászóláshoz be kell jelentkezni
Igen; az tetszett meg benne, hogy a program írója élt egy heurisztikus feltételezéssel, ami sok esetben jól működik. Ha meg nem jön be a feltételezés, akkor senki sincs kötelezve arra, hogy a -b kapcsolóval használja a look-ot. Nekem mindenesetre előrevitte a dolgomat. Meg az is jólesett, hogy "éreztem", hogy biztos csinált már valaki ilyesmit - s bejött a megérzésem.
(Amúgy az efféle megérzéseim egyáltalán nem mindig igazolódnak be; pl. arra számítottam, hogy van gyári php-s log.ker függvény, de nincs.)
- A hozzászóláshoz be kell jelentkezni