Szervusztok!
Adott egy ~2GB méretű file, amire szeretném a grep-et ráengedni. Semmi extra regexp, szimpla "bitkolbász".
2GB memória, majd utána még 2-t alátettem swap formájában, de sajnos nem segített.
Squeeze, ulimit alap, miből lehetne még kivarázsolni értelmes határoló dolgot tartalmazó beállítást?
Köszönöm előre is!
Üdv,
vf
- 5944 megtekintés
Hozzászólások
Melyik grep-pel próbálkozol? GNU? Próbálj BSD-st, vagy plan9port-ost.
--------------------------------------
Unix isn't dead. It just smells funny.
- A hozzászóláshoz be kell jelentkezni
Megpróbáltam a grep, egrep, fgrep lehetőségeket. Van még?
Köszi,
vf
- A hozzászóláshoz be kell jelentkezni
agrep: can't open file for reading: fileName
- A hozzászóláshoz be kell jelentkezni
A /usr/lib/plan9/bin/grep megoldotta!
Köszönöm, eddig nem ismertem!
Üdv,
vf
- A hozzászóláshoz be kell jelentkezni
Az a fő különbség, hogy a GNU grep-ben van backtracking, ami miatt kénytelen memóriában tartani előző állapotokat, míg a plan9 implementáció egy sima state machine, emiatt gyorsabb és kevesebb memóriát is eszik.
--------------------------------------
Unix isn't dead. It just smells funny.
- A hozzászóláshoz be kell jelentkezni
GNU grep-ben van backtracking [...] a plan9 implementáció egy sima state machine
Van erről több infód? (Már azon túl persze, hogy nézzem meg a forrást... a GNU grep-ébe nem kívánkozik belenéznem.) Azért is érdekel a kérdés, mert fgrep üzemmódban nem látom, miféle backtracking-ra lehet szükség. (De már késő van...)
- A hozzászóláshoz be kell jelentkezni
Ez biztosan nem igaz. GNU grep először heurisztikával megy rá ha lehet (egy pattern esetén Boyer-Moore variáns, több pattern esetén pedig Commentz-Walter algoritmussal), majd csak egy már jól behatárolt esélyesen illeszkedő területre hívja meg a teljes regex matchert, ami pedig egy DFA megvalósítás.
- A hozzászóláshoz be kell jelentkezni
A GNU grep tamogatja a backreference hasznalatot. Egy backreferencet hasznalo regex pedig mar nem regularis nyelv, igy DFA-val nem oldhato meg.
- A hozzászóláshoz be kell jelentkezni
A GNU grep tamogatja a backreference hasznalatot
Igen, de nem az fgrep-ben. Az OP próbálta az fgrep-et, és az is elhasalt.
- A hozzászóláshoz be kell jelentkezni
Teljesen jogos. Ezesetben széttárom karjaimat.
--------------------------------------
Unix isn't dead. It just smells funny.
- A hozzászóláshoz be kell jelentkezni
Csak hogy kerek legyen...
- Debian 6.0.5 32bit (i386)
- grep, egrep, fgrep, GNU grep 2.6.3
- This is agrep version 3.0, 1994.
- /usr/lib/plan9/bin/grep 1:6-1
a minta: "dreh" (drehás, csak hogy az ékezettel ne kelljen macerálódni)
a file: sima thunderbird mail file ami sérült, nem tudja az alkalmazás fel parsol-ni. >2GB
Üdv,
vf
- A hozzászóláshoz be kell jelentkezni
Feltételezem, hogy linux alól vagy (mivel erről nem adtál infót). Akkor ez mind GNU. A különbség egyszerüsítve:
fgrep - kész szövegre, külenleges karakterek nélkül.
grep - ez van legközelebb az ed(1) RE-ihez
egrep - bővített RE-k.
Lent említett --mmap kapcsolót megpróbálhatod, bár nem hiszem, hogy jelen esetben segít.
Ha tényleg nagyon egyszerű a minta, amit keresel, akkor lehet a legegyszerűbb megoldás, írni rá egy pár soros C programot. Nem kell ágyúval lőni verébre. A RE-k elég nehézsúlyú dolgok.
--------------------------------------
Unix isn't dead. It just smells funny.
- A hozzászóláshoz be kell jelentkezni
Már elkezdtem írni is de a Debian GNU Linux alatt minden meg van már oldva, csak használni kell tudni.
Köszi +1x! ;)
vf
- A hozzászóláshoz be kell jelentkezni
Vagy darabold fel egyenlore reszekre es probald ki ugy.
--
1 leszel vagy 0 élő vagy hulla!
- A hozzászóláshoz be kell jelentkezni
megpróbálom beolvasni apránként egy pl. 1M-s tömbbe, majd végigrohanni rajta, de nem értem, hogy mivel nincs bonyolult joker, stb. karakter a mintában, mért nem teszi ezt alapból.
Köszi,
vf
- A hozzászóláshoz be kell jelentkezni
Megpróbálnám, hogy a grep helyett eszi-e az awk.
- A hozzászóláshoz be kell jelentkezni
Működik a
gawk '/pattern/{print}'
megoldás is!
Köszi!
vf
- A hozzászóláshoz be kell jelentkezni
1. miféle a file szerkezete? ha van benne egy 1.5 GB hosszú sor (= amin belül nincs újsor karakter), jó eséllyel megpróbálhatja benyalni egyben.
2. grep --mmap
Kiegészítés: ha a grep 32 bites processz (ILP32), akkor tök mindegy, mennyi a swap-od. (És valószínűleg az --mmap sem fog segíteni, egyszerűen nincs elég címtér a processzben.)
Persze nem tudom, minek erőltetem magam, amikor ez megint egy pocsékul leírt hibajelenség.
- A hozzászóláshoz be kell jelentkezni
Ha neaggyisen Macből jött a fájl akkor lehet akár többsoros is, miközben mégse az.
- A hozzászóláshoz be kell jelentkezni
Sajnos a levelező nem tudja helyreállítani, de van benne sok hasznos információ, meg csatolt szemetek is persze, ezért >2GB. ;)
- A hozzászóláshoz be kell jelentkezni
Szia lacos!
Köszönöm segítséged, egyéb úton megoldódott, lsd. fentebb. Az mmap valóban nem elég a GNU grep-nek.
Sajnos csak ennyi volt a hibaüzenet amit én láttam belőle, nem álltam neki strace-elni ez igaz, bár mint látszik nem is kellett. Röpke egy óra alatt több ötletet is kaptam, ami simán célt ért, szóval szerintem elég volt a hiba leírása.
Azért hogy okuljak, kérlek tedd meg nekem, hogy ilyen esetben következőre miképp kell a hibajelenséget leírni?
Köszi előre is!
Üdv,
vf
- A hozzászóláshoz be kell jelentkezni
miképp kell a hibajelenséget leírni
Írd le, hogy hogyan tudom a hibát reprodukálni. Kis túlzással onnantól kezdve, hogy bemegyek a boltba, és azt mondom, hogy "kérek egy számítógépet".
- Milyen platform (x86_64, i686-pae, i686), esetleg 64 biten 32 bites program.
- Disztribúció és kiadása.
- Program neve és pontos verziószáma (a disztró által hozzáragasztott cuccok is), dpkg-val / rpm-mel lekérdezve.
- A file jellege. Nyilván bizalmas adatokat nem adhatsz meg, de valami pár soros utánzatot lehet.
- Pontos parancssor (vagy utánzat, amivel tudod reprodukálni). Pontos (lehetőleg teljes) hibaüzenet / log, ha ennek van értelme.
- Hiba szöveges leírása. Mi történik. Minek kellene történnie. Mennyire megbízhatóan reprodukálható.
- A hozzászóláshoz be kell jelentkezni
Köszi, majd legközelebb! (A java megvolt egyébként.)
Üdv,
vf
- A hozzászóláshoz be kell jelentkezni