Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
jest sobie log który ma sporo wpisów (ramek) i z całego loga chce wyciągnąć tylko te
______________________________________________________________________________ | (119631:000075) Physical-Event : | long: 49 desti: 0 source: 0 cryst: 1 cpl: 2 us: 0 term: 0 type a5 | tei: 0 >>>> message received : SETUP [05] Call ref : 59 44 |______________________________________________________________________________ | | IE:[04] BEARER_CAPABILITY (l=3) 80 90 a3 | IE:[18] CHANNEL (l=3) a9 83 92 -> T2 : B channel 18 exclusive | IE:[6c] CALLING_NUMBER (l=11) -> 21 81 Num : 123456789 | IE:[70] CALLED_NUMBER (l=5) -> 81 Num : 567890123 | [a1] Sending complete |______________________________________________________________________________ ______________________________________________________________________________ | (119631:000076) 1268: Send_IO1 (link-nbr=1, sapi=0, tei=0) : | long: 23 desti: 0 source: 15 cryst: 1 cpl: 2 us: 8 term: 0 type a5 | tei: 0 <<<< message sent : CALL PROC (02) Call ref : d9 44 |______________________________________________________________________________ | | IE:[18] CHANNEL (l=3) a9 83 92 -> T2 : B channel 18 exclusive |______________________________________________________________________________
tu są tylko dwie ramki i charakteryzują się wpisem w wierszu zaczynającym się od tei:... 9 44 czyli cztery ostatnie znaki z wiersza
jak na podstawie tych czterech znaków wyciągnąć całą ramkę ? jedna ma 12 wierszy a druga 8.
Offline
I każda ramka 59 44 ma 12 wierszy i każda d9 44 ma 8?
Jeżeli tak to:
grep '59 44' -B3 -A8 log.txt grep 'd9 44' -B3 -A4 log.txt
EDIT:
Krótkie wyjaśnienie co robią parametry -A i -B:
man grep napisał(-a):
Context Line Control
-A NUM, --after-context=NUM
Print NUM lines of trailing context after matching lines.
Places a line containing a group separator (--) between
contiguous groups of matches. With the -o or --only-matching
option, this has no effect and a warning is given.
-B NUM, --before-context=NUM
Print NUM lines of leading context before matching lines.
Places a line containing a group separator (--) between
contiguous groups of matches. With the -o or --only-matching
option, this has no effect and a warning is given.
Ostatnio edytowany przez Piotr3ks (2016-03-06 17:43:04)
Offline
fajnie, ale :)
ramka 59 44 tylko raz ma 12 wierszy, później ma po 8, a są też ramki bardziej rozbudowane, więc ta wartośc jest zmienna. Myślałem żeby zczytywać wiersze do drugiego wystąpienia wzorca "|_________" to jest wzór kończący całą ramkę niezależnie od jej rozmiaru.
1) znam wartość jaka musi wystąpić w ramce
2) wiem już jak wyłapać początek tej ramki '-B3'
3) nie wiem jak łapac koniec przy zmiennej dlugości
może to zrobić jakąś pętlą ?
Offline
Między ramkami jest pusty wiersz?
Jeżeli tak to:
cat log.txt | csplit -s - '/^$/'
Jak to wykonasz to każdą pojedynczą ramkę zapisze Ci do oddzielnego pliku (pod warunkiem, że między ramkami jest pusta linia).
EDIT:
No i jak już będziesz miał każdą ramkę w oddzielnym pliku to sobie już pętlą for i grepem przelecisz po tych plikach.
Ostatnio edytowany przez Piotr3ks (2016-03-06 18:56:41)
Offline
tego nie znałem, ale wyszło tak, że zrobił 2 pliki i w pierwszym jest pierwsza ramka a w drugim reszta, a źródełko wygląda tak
______________________________________________________________________________ | (119631:000075) Physical-Event : | long: 49 desti: 0 source: 0 cryst: 1 cpl: 2 us: 0 term: 0 type a5 | tei: 0 >>>> message received : SETUP [05] Call ref : 59 44 |______________________________________________________________________________ | | IE:[04] BEARER_CAPABILITY (l=3) 80 90 a3 | IE:[18] CHANNEL (l=3) a9 83 92 -> T2 : B channel 18 exclusive | IE:[6c] CALLING_NUMBER (l=11) -> 21 81 Num : 123456789 | IE:[70] CALLED_NUMBER (l=5) -> 81 Num : 567890123 | [a1] Sending complete |______________________________________________________________________________ ______________________________________________________________________________ | (119631:000076) 1268: Send_IO1 (link-nbr=1, sapi=0, tei=0) : | long: 23 desti: 0 source: 15 cryst: 1 cpl: 2 us: 8 term: 0 type a5 | tei: 0 <<<< message sent : CALL PROC (02) Call ref : d9 44 |______________________________________________________________________________ | | IE:[18] CHANNEL (l=3) a9 83 92 -> T2 : B channel 18 exclusive |______________________________________________________________________________ ______________________________________________________________________________ | (119631:000077) 1268: Send_IO1 (link-nbr=1, sapi=0, tei=0) : | long: 22 desti: 0 source: 15 cryst: 1 cpl: 2 us: 8 term: 0 type a5 | tei: 0 <<<< message sent : ALERT (01) Call ref : d9 44 |______________________________________________________________________________ | | IE:[1e] PROGRESS_ID (l=2) 81 88 |______________________________________________________________________________ ______________________________________________________________________________ | (119668:000078) Physical-Event : | long: 22 desti: 0 source: 0 cryst: 1 cpl: 2 us: 0 term: 0 type a5 | tei: 0 >>>> message received : DISCONNECT [45] Call ref : 59 44 |______________________________________________________________________________ | | IE:[08] CAUSE (l=2) 81 90 -> [90] NORMAL CALL CLEARING |______________________________________________________________________________ ______________________________________________________________________________ | (119668:000079) 1268: Send_IO1 (link-nbr=1, sapi=0, tei=0) : | long: 22 desti: 0 source: 15 cryst: 1 cpl: 2 us: 8 term: 0 type a5 | tei: 0 <<<< message sent : RELEASE [4d] Call ref : d9 44 |______________________________________________________________________________ | | IE:[08] CAUSE (l=2) 81 90 -> [90] NORMAL CALL CLEARING |______________________________________________________________________________ ______________________________________________________________________________ | (119669:000080) Physical-Event : | long: 22 desti: 0 source: 0 cryst: 1 cpl: 2 us: 0 term: 0 type a5 | tei: 0 >>>> message received : REL COMP [5a] Call ref : 59 44 |______________________________________________________________________________ | | IE:[08] CAUSE (l=2) 81 90 -> [90] NORMAL CALL CLEARING |______________________________________________________________________________
Offline
No to mała poprawka:
csplit -s log.txt '/^$/' '{*}'
Ostatnio edytowany przez Piotr3ks (2016-03-06 19:58:56)
Offline
Ja do takich kfiatków zazwyczaj zatrudniam Perla:
https://forum.dug.net.pl/viewtopic.php?id=22977
A tak poza tym, to co za program generuje te logi?
- może da się tam wytargać dane w bardziej zjadliwej formie.
Ostatnio edytowany przez Jacekalex (2016-03-06 20:31:09)
Offline
zdecydowanie lepiej, czyli tak:
1) przepuszczam plik przez csplita wychodzi z tego z 1000 plików
2) przeszukuje pliki w poszukiwaniu ciągu '123456789' <- grep -l 123456789 * ?
3) w znalezionym pliku zczytuję ostatnie 4 znaki wiersza zaczynającego się od 'tei' <- tu już nie wiem jak grep tei|tail -c 5
4) przeglądam kolejno pliki w poszukiwaniu łańcucha z pkt3 i jeśli znajde to dorzucam do wyniku cały plik
Ostatnio edytowany przez MarekO (2016-03-06 23:15:54)
Offline
Jacekalex
nie mam na maszynie docelowej perla i muszę sobie radzić podstawowymi narzędziami
a te logi to jest ruch na karcie ISDN i to jest bardziej zjadliwa forma, podstawowa to RAW częściowo tłumaczony na czytelny a większość danych szesnastkowo :)
Offline