Portál AbcLinuxu, 9. května 2024 06:12


Dotaz: uprava logu

8.6.2012 13:26 2012
uprava logu
Přečteno: 254×
Odpovědět | Admin
Dobry den, mam logy tohoto formatu:
...
May 10 16:23:00 aaaaa
May 10 16:23:33 bbbb
...
May 11 16:23:33 cccc
May 11 16:23:35 dddd
...
May 12 16:25:48 eee
....
A potrebuju z nich vyparsovat jen urcitou cast od urciteho data,hodiny,minuty zase do urciteho data. To znamena uriznout radky, ktere uz tam nepatri. Udelal jsem to bash skriptem s pomoci "date %s". Ale je to celkem narocne na cas, neexistuje nejaky rychlejsi bashovy zpusob?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

8.6.2012 13:38 NN
Rozbalit Rozbalit vše Re: uprava logu
Odpovědět | | Sbalit | Link | Blokovat | Admin
grep ?

NN
8.6.2012 13:41 2012
Rozbalit Rozbalit vše Re: uprava logu
no ja potrebuju urcity rozpeti podle casu, tohle GREPem nepujde...
8.6.2012 14:00 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: uprava logu
pojde ti to cez egrep :)
8.6.2012 14:11 2012
Rozbalit Rozbalit vše Re: uprava logu
to sice jo, ale jen pro logy, ktere tam jsou obsazeny. Napriklad pro tohle:
May 10 16:23:00
May 12 16:25:48
ale ja to potrebuju od konkretniho casu, ktery ani v tech logach nemusi byt... tzn. treba
od: May 10 16:23:01
do: May 11 16:23:34
8.6.2012 14:44 iKoulee | skóre: 19
Rozbalit Rozbalit vše Re: uprava logu
asi bych to udelal saodou regularnich vyrazu:
sed -n \
-e '/May 10 16:23:0[1-9]/p' \
-e '/May 10 16:23:[0-5][0-9]/p' \
-e '/May 10 16:2[3-9]:[0-5][0-9]/p' \
-e '/May 10 16:[2-5][0-9]:[0-5][0-9]/p' \
...
otazka zni jak casto se to dela jestli to stoji za to psani
Even if you fall on your face, you’re still moving forward
Jendа avatar 8.6.2012 14:50 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: uprava logu
sed -n \
-e '/May 10 16:23:0[1-9]/p' \
-e '/May 10 16:23:[0-5][0-9]/p' \
-e '/May 10 16:2[3-9]:[0-5][0-9]/p' \
-e '/May 10 16:[2-5][0-9]:[0-5][0-9]/p' \
...
Oh fuck.

(Seřadil bych je.) Spíš bych si našel začátek a konec (nejlépe půlením intervalu) a pak vyřízl řádky, co jsou mezi tím.
8.6.2012 14:55 iKoulee | skóre: 19
Rozbalit Rozbalit vše Re: uprava logu
priznavam se v sedu jsem dost marnej. Vzdycky jednou za cas si reknu ze se poradne naucim awk/sed tak si neco prectu, ale jak to nepouzivam tak mi po nejake dobe zbyde v hlave jen neurcity pocit: "Tohle jde urcite udelat nejak lepe za pomoci..."
Even if you fall on your face, you’re still moving forward
Jendа avatar 8.6.2012 14:59 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: uprava logu
Ale jo, ne, že bych taky neprasil, ale tvůj způsob má ten problém, že při delších intervalech bude těch regexpů strašlivě moc (a navíc napsat je tak, aby vykryly všechny časy, co můžou, bude silně netriviální).
8.6.2012 15:12 iKoulee | skóre: 19
Rozbalit Rozbalit vše Re: uprava logu
To ja samozrejme chapu, jen je mi zkratka nekdy kladivo blizsi nez sroubovak :-)

Jinak pokud imho pokud to bude souvysly interval tak pocet regularu tak rust nebude, spise roste s presnosti casu, coz ale na principu, ze je to zametani hrabema samozrejme nic nemeni.
Even if you fall on your face, you’re still moving forward
8.6.2012 15:15 marek
Rozbalit Rozbalit vše Re: uprava logu

Dobry den.

Neco podobneho jsem nedavno psal.

Je to na log velikosti radove stovek GB.

Hledam pouze zacatek.

Do logu se prubezne zapisuje a tak si urcim bod do ktereho ctu.

Vubec mi tam nevadi ze kdyz to neni uplne presne, povoluji maximalne 20 iteraci.


#***********************************************************tady hledam co mohu preskocit
CAS="$(date -d "${PRED} hour ago"  +'%b %e %H:%M')"
CASS="$(date -d "${CAS}" +%s)"


ZACATEK=0
KONEC=$(ls -l /var/log/blabla|awk '// {print $5}')
MAX=0

while [ ${ZACATEK} -ne ${KONEC} ]
do

        POROVNEJ="$(dd if=/var/log/blabla bs=1 skip=$((KONEC/2+ZACATEK/2)) 2>/dev/null |head -n2 | sed -e'2s/\([^ ]\+ \+\)\([^ ]\+ \+\)\([^ ]\+ \+\)\([^ ]\+ \+\).*/\1\2\3\4/p;d')"

        
        if [ ${CASS} -gt "$(date -d "${POROVNEJ/:[0-9][0-9] */}" +%s)" ]
        then
                ZACATEK=$((KONEC/2+ZACATEK/2))
        else
                KONEC=$((KONEC/2+ZACATEK/2))
        fi
        if [ $MAX -gt 20 ] || [ "${CAS}" = "${POROVNEJ/:[0-9][0-9] */}" ]
        then
                KONEC=${ZACATEK}
        fi
        MAX=$((MAX+1))
done
#*************************************************************snad jsem to nasel a mam to v $KONEC

pak to pouzivam:

VELIKOST=$(ls -l /var/log/blabla|awk '// {print $5}')
dd if=/var/log/blabla bs=1024 skip=$((KONEC/1024)) count=$(((VELIKOST-KONEC)/1024)) 2>/dev/null 
Marek
8.6.2012 14:54 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: uprava logu

a preco by to akoze neslo? :)

egrep "^May 1[0-1] 16:23:(?0([1-9])|(?[1-2]([0-9])|(?3([0-4])|())))$"

8.6.2012 14:59 iKoulee | skóre: 19
Rozbalit Rozbalit vše Re: uprava logu
protoze tenhel vyraz nematchuje to co tazatel hleda
Even if you fall on your face, you’re still moving forward
Jendа avatar 8.6.2012 15:01 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: uprava logu
Třeba proto, že tohle pokryje z požadovaného intervalu méně než promile? ;)
8.6.2012 15:33 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: uprava logu
Jasne, to tam prejde do dalsieho dna :) takze tu je oprava, ktora pokryva toto
od: May 10 16:23:00
do: May 10 23:59:59

egrep "^May (?10 (?1(?6(?:2([3-9]:[0-5][0-9])|(?:[3-5]([0-9]:[0-5][0-9])|()))|((?[7-9](:[0-5][0-9]:[0-5][0-9])|())))|(?2([0-3]:[0-5][0-9]:[0-5][0-9])|()))|(?11 ()|()))$"

Na konci je este priestor pre 'May 11 ...', uz sa mi to dalej nechcelo robit avsak da sa to obdobne ako pre 'May 10 ...'. Inymi slovami, da sa to ;)
8.6.2012 20:54 jekub
Rozbalit Rozbalit vše Re: uprava logu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Když píšete, že je to náročné na čas, tak to asi potřebujete opakovaně.

Jako dobré řešení mi případá nahrát log do relační databáze a pak použít sql. Takový import by měl být v pohodě prostředky té které databáze.

Já mám skoro všude (byť z jiných důvodů) oracle-xe a pokud potřebuju, použiju externí tabulky. Tak ani nemusím data nahrávat přímo do db. Pokud jednou nad logem udělám externí tabulku, mám vystaráno s jakýmkoli obskurním dotazem, který si někdo v budoucnu vymyslí.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.