Řešení 1:
Myslím, že byste mohli použít tail k výstupu pouze těch posledních 4 GB nebo tak pomocí -c
přepínač
-c, --bytes=[+]NUM
výstup posledních NUM bytů; nebo použijte -c +NUM pro výstup začínající bytem NUM každého souboru
Pravděpodobně byste také mohli něco udělat s dd nastavením bs=1
a skip
přejděte na posun, který chcete spustit, např.
dd if=file bs=1024k skip=12g | grep something
Řešení 2:
Zveřejňuji to jen proto, že to některé komentáře požadovaly.
To, co jsem nakonec použil, bylo (soubor 15 GB). Fungovalo to velmi rychle a ušetřilo mi to spoustu času.
tail -f -c 14G file | grep something
Také jsem provedl velmi základní benchmark na stejném souboru. Testoval jsem:
soubor grep xxx
// trvalo navždy (> 5 minut)dd if=soubor bs=1 přeskočit=14G | grep xxx
// velmi rychle <1 socas -c 14g | grep xxx
// docela rychle <2 sec
tail
je jen o něco kratší.
Poznámka: použitá přípona g
a G
se liší podle příkazu (Ubuntu 15.10)
Řešení 3:
To neodpovídá na otázku o názvu, ale udělá to, co chcete. Použijte tac k obrácení souboru a poté použijte grep k nalezení vašeho řetězce. Pokud se váš řetězec vyskytuje v souboru pouze jednou nebo známý početkrát, nechte jej běžet, dokud nenajde známý počet výskytů. Tímto způsobem, pokud je váš předpoklad o tom, kde se v souboru nachází, nesprávný, stále jej najde. Pokud to chcete omezit, můžete k tomu použít hlavu. Příkaz head by šel mezi tac a grep.
Příkaz tedy vypadá takto:
tac < logfile | grep myString