GNU/Linux >> Znalost Linux >  >> Linux

Grep v obrovském souboru protokolu (>14 GB) pouze posledních x GB?

Ř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 s

ocas -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

Linux
  1. Grep Word v souboru a pak zkopírujte soubor?

  2. Výstup do Stdout a zároveň Grep do souboru?

  3. Odstranit čárku mezi uvozovkami pouze v souboru odděleném čárkou?

  1. Najít pouze první výskyt pouze pomocí Grepu?

  2. Vytiskněte poslední řádek souboru z CLI

  3. diff pro výstup pouze názvů souborů

  1. Jaké jsou rozdíly mezi grep, awk a sed?

  2. Jak zachytit výstup top příkazu do souboru v linuxu?

  3. Soubor protokolu Tail na více počítačích přes ssh