Portál AbcLinuxu, 6. května 2025 16:22
... 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?
May 10 16:23:00 May 12 16:25:48ale 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
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
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.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' \ ...
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/nullMarek
a preco by to akoze neslo? :)
egrep "^May 1[0-1] 16:23:(?0([1-9])|(?[1-2]([0-9])|(?3([0-4])|())))$"
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.