[megoldva] logaritmikus keresés - grep (neve: look)

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.

Hozzászólások

Nem, de lehet ilyet írni. Más kérdés, hogy mennyi értelme van...

í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.

í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

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.

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)

Lehet, hogy a 'look' parancsot keresed: man look.

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. ;)

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.)