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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2012-09-17 09:50:48

  karol - Użytkownik

karol
Użytkownik
Zarejestrowany: 2010-03-04

Przetwarzanie pliku tekstowego

Witam,
problem dotyczy pliku tekstowego o poniższej budowie


miejscowość
rodzaj_alarmu  czas_wygenerowania  czas_trwania  tresc_alarmu

poniżej przykład:
KATOWICE
emergency  22:15:00  00:11:00  ping


Interesują mnie tylko alarmy o określonej treści np "ping" gdzie czas trwania jest większy od 1 minuty. W wyniku program powinien pokazać:
KATOWICE
emergency 22:15:00 00:11:00 ping.
Czyli najpierw sprawdza wartość "czas_trwania" i "tresc_alarmu", jeśli spełnia warunki to wyświetla miejscowość, czas i treść.
Zadanie w sam raz dla sed i awk ale nie jestem pewien jak wymusić sprawdzanie określonych wartości a potem cofnięcie się o n linijek wyżej tak żeby można było określić miejscowość.

Offline

 

#2  2012-09-17 11:25:32

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: Przetwarzanie pliku tekstowego

Więc tak:
cofanie się w pliku odpada, ponieważ i tak nie wiesz o ile wierszy musisz się cofnąć. Chyba że masz jakiś pewny sposób na określenie, w którym momencie zaczynają się wiersze dla nowej miejscowości.
Jeżeli masz na to sposób, to czytaj plik wiersz po wierszu i kiedy natkniesz się na nową miejscowość, umieszczaj jej nazwę w jakiejś zmiennej. Potem czytasz sobie dalej aż natkniesz się na interesujący Cię warunek (trzecie pole ma większą niż określona wartość). Wtedy wypisujesz nazwę miejscowości ze zmiennej oraz wiersz spełniający warunek.

Całość więc sprowadza się do określenia pewnego sposobu na określenie, że dany wiersz zawiera nazwę miejscowości. Sądząc po Twoim przykładzie, być może chodzi o wszystkie wiersze złożone wersalikami. A może wszystkie wiersze które mają jedną lub mniej spacji (nie znam miejscowości w Polsce, której nazwa złożona by była z trzech wyrazów)?

A jeżeli masz kontrolę nad oprogramowaniem, które produkuje plik wejściowy, to zmień je tak, aby zamiast pseudo-ini produkowało zwykły log (nazwa miejscowości w każdym wierszu). Wtedy będziesz miał problem z głowy.

Offline

 

#3  2012-09-17 19:38:17

  qluk - Pan inż. Cyc

qluk
Pan inż. Cyc
Skąd: Katowice
Zarejestrowany: 2006-05-22

Re: Przetwarzanie pliku tekstowego

PERL
ewentualnie wytnij co drugi newline podstawiając w jego miejsce coś co będzie rozdzielać [miejscowość] od [sygnatura alarmu].

Pokaż przykład dłuższego pliku, bo nie rozumię skąd jest "n linijek" skoro w zawartym przykładzie nazwa miejscowości jest nad datagramem.

Offline

 

#4  2012-09-18 07:01:57

  karol - Użytkownik

karol
Użytkownik
Zarejestrowany: 2010-03-04

Re: Przetwarzanie pliku tekstowego

Poniżej przykład pliku tekstowego, niestety nie mam wpływu na jego format. Czcionką pogrubioną zaznaczyłem wiersze które powinny znaleźć się w wyniku.

;WWA - Zachodni .234;;;;;
;192.168.0.234;;;;;
;;;;;;
;Severity;Generated on   ;Cleared on   ;Outage duration;Alarm Description;
;;;;;;
;critical;2012-09-16 23:08:39;"2012-09-16
23:09:29";00 00:00:50;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 19:23:39;"2012-09-16
19:27:30";00 00:03:51;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 16:30:39;"2012-09-16
16:33:31";00 00:02:52;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 16:22:39;"2012-09-16
16:24:30";00 00:01:50;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;

;critical;2012-09-16 09:07:39;"2012-09-16
09:08:35";00 00:00:56;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 09:03:39;"2012-09-16
09:04:33";00 00:00:54;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 08:59:39;"2012-09-16
09:00:35";00 00:00:55;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 08:55:39;"2012-09-16
08:57:37";00 00:01:58;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 05:44:39;"2012-09-16
05:45:30";00 00:00:51;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 02:25:39;"2012-09-16
02:27:29";00 00:01:50;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 00:39:39;"2012-09-16
00:42:29";00 00:02:51;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 23:08:32;"2012-09-16
;TOR - PEC Aleks .222;;;;;
;192.168.0.222;;;;;
;;;;;;
;Severity;Generated on   ;Cleared on   ;Outage duration;Alarm Description;
;;;;;;
;critical;2012-09-16 03:58:33;"2012-09-16
04:08:21";00 00:09:48;HAR EXC A - Out Sum Fault failed to receive expected response. See Additional Information for details.;
;critical;2012-09-16 03:58:33;"2012-09-16
04:08:21";00 00:09:49;HAR EXC B - Out Sum Fault failed to receive expected response. See Additional Information for details.;
;critical;2012-09-16 04:05:46;"2012-09-16
04:07:36";00 00:01:50;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 03:55:46;"2012-09-16
04:01:53";00 00:01:08;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 03:54:02;"2012-09-16
04:07:51";00 00:13:49;SAT 2 TS NOT OK;

Offline

 

#5  2012-09-18 07:23:19

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: Przetwarzanie pliku tekstowego

A może zamiast kombinować z logiem, wykombinować inny program, bardziej "kumaty" w kontekście konfiguracji logowania, sensownego wyjścia do sysloga czy baz sql?
Albo inne wyjście logowania dla obecnego programu?

Co urodziło tego loga, jaki program czy może urządzenie?

Ostatnio edytowany przez Jacekalex (2012-09-18 07:28:49)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#6  2012-09-18 23:34:11

  qluk - Pan inż. Cyc

qluk
Pan inż. Cyc
Skąd: Katowice
Zarejestrowany: 2006-05-22

Re: Przetwarzanie pliku tekstowego

Ta a może jeszcze zaproponujesz żeby sam zrobił od nowa system czujek?

Ogólny schemat:
regexp dla miejsca -> do zmiennej
w petli sprawdzamy kolejne wpisy a warunkiem pętli jest regexp dla miejsca.

Ot wszystko, teraz zależenie w czym to zrobisz perl, PHP, bash/sh/zsh/etc. (tutaj może być trudniej ale wykonalne), python, itd.

Offline

 

#7  2012-09-18 23:50:49

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: Przetwarzanie pliku tekstowego

@qluk

A wiesz może, co te logi generuje.
Bo jeśli to jakiś program, który da się zapiąć do sysloga, to sprawa byłaby XXX razy prostsza.
Zwłaszcza, że tam widzę jakiś wynik PING cośtam, a do takich rzeczy raczej nie kupuje się MS Windows 2158 serwer. ;)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#8  2012-09-19 09:06:28

  karol - Użytkownik

karol
Użytkownik
Zarejestrowany: 2010-03-04

Re: Przetwarzanie pliku tekstowego

Dziękuję wszystkim za odpowiedzi, napewno najłatwiej byłoby zmienić format pliku wyjściowego loga ale nie wiem jak podejdzie do sprawy dostawca oprogramowania monitorującego, czy w ogóle będzie chciał coś zmieniać. Logi generuje linux, które są przetwarzane przez jakiś "wynalazek" do formatu excela. Potem z kolei konwersja do formatu txt rozdzielonych znakami ";" Na chwilę obecną będę szedł w kierunku zaproponowanym przez qluk ale przed tym sprawdzę czy da się coś zmienić z dotychczasową formą logów.

Offline

 

#9  2012-09-20 02:19:59

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: Przetwarzanie pliku tekstowego

Logi generuje linux, które są przetwarzane przez jakiś "wynalazek" do formatu excela.

Jeśli możesz się jakoś dostać do logów generowanych przez Linuxa, to podejrzewam, że miałbyś dożo prostszą sytuację.
Jedyna format, w jakim Linux może wygenerować logi zjadliwe dla exela, to format CSV - tekst oddzielony przecinkami.
Sznurek: http://pl.wikipedia.org/wiki/CSV_%28format_pliku%29
Można też użyć formatu XML.
Gdybyś mógł wytargać ten plik - który jest zrobiony dla exela, to też mogłoby uprościć sprawę w jakimś stopniu.
Poza tym nie Linux generuje logi, bo pingowaniem nie zajmuje się kernel, tylko jakiś demon lub skrypt, który przygotowuje logi dla "wynalazku".
Radziłbym obejrzeć i proces w Linuxie, który samego dokonuje aktu pingowania i wypluwa logi, jak i wynalazkowi, który je formatuje dla exela.

Nie zdziwiłbym się, gdyby samym pingowaniem zajmował się jakiś sktypt napisany w bashu czy perlu.
Zwłaszcza, że tu masz gotowy przykład takiego "dzieła do pingowania".
Względnie, czy ten "program od dostawcy",  to   nie jest przypadkiem oryginał lub klon Nagiosa lub Zabbixa.

Pozdrawiam
;-)

Ostatnio edytowany przez Jacekalex (2012-09-20 05:33:17)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#10  2012-09-20 05:19:30

  karol - Użytkownik

karol
Użytkownik
Zarejestrowany: 2010-03-04

Re: Przetwarzanie pliku tekstowego

Gdybym miał do tego dostęp to nie byłoby problemu. Ale niestety nie mam i muszę sobie radzić z tym co jest dostępne na chwilę obecną. Może Excel umie robić takie rzeczy ?

Offline

 

#11  2012-09-20 05:26:35

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: Przetwarzanie pliku tekstowego

Jak nie masz dostępu - to skąd wiesz, że tam jest Linux? ;)
Jeśli koniecznie exel - i masz to w tabelkach exela, to exel może eksportować do formatu XML, a XML można obrabiać skryptami na 1200 sposobów, we wszystkich językach programowania.
Podobnie z resztą jak csv.

A w ogóle skąd się te dane biorą w exelu?
Jak są transportowane do exela?

Ostatnio edytowany przez Jacekalex (2012-09-20 05:32:01)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#12  2012-09-20 06:17:24

  karol - Użytkownik

karol
Użytkownik
Zarejestrowany: 2010-03-04

Re: Przetwarzanie pliku tekstowego

Jacekalex napisał(-a):

Jak nie masz dostępu - to skąd wiesz, że tam jest Linux? ;)

Niestety też go monitoruję (-: ale nie mam uprawnień żeby mu się przyjrzeć. Eksportowanie to połowiczne rozwiązanie problemu bo sam excel tego nie wyeksportuje a poszukuję rozwiązania które zautomatyzuje cały proces. Dane przesyłane na e-mail.

Offline

 

#13  2012-09-20 06:51:02

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: Przetwarzanie pliku tekstowego

Przychodzą mailem? to jest ważna wiadomość.
W mailu jest jakiś załącznik, który wczytujesz do exela?
Czy exel sam nauczył się odbierać maile?
Czy kawałek tego pliku tekstowego, co wklejałeś wcześniej, to są dane wejściowe do exela, czy wyjściowe z exela w trybie jakiegoś eksportu?

Bo jakbyś sprawdził, w jakim formacie dane docierają do exela, to znacząco uprościłoby kombinowanie.
Sam plik tekstowy wygląda jak csv oddzielany średnikami.

Na "urządzeniu z Linuxem" nie masz nawet konta zwykłego użytkownika, ale go monitorujesz.
Czyli prawdopodobnie trzeba wziąść kij baseballowy i isć do administratora tego "urządzenia z Linuxem" ;)

Ostatnio edytowany przez Jacekalex (2012-09-20 06:54:52)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#14  2012-09-21 14:00:55

  jezoo - Dzięcioł

jezoo
Dzięcioł
Skąd: Z lasu
Zarejestrowany: 2005-09-02

Re: Przetwarzanie pliku tekstowego

można zabawić się w sumy kontrolne wiersza. Może co dla nie których wydawać się śmieszne ale prawdziwe.

Mamy coś takiego:

;WWA - Zachodni .234;;;;;
;192.168.0.234;;;;;
;;;;;;
(....)
;TOR - PEC Aleks .222;;;;;
;192.168.0.222;;;;;
;;;;;;

element dla sumy kontrolenej to ;;;;;;, czyli

1) sprawdz hash lini
2) jezeli jest rowne ';;;;;;' to
a) -2 w tablicy (lub -2 linie)
b) prerób na tablice
c) wycignij nazwe miasta
d) usuń w/w linie
e) wstaw na poczatek lini z logiem

to samo dla IP tylko -1

i to wszystko


LRU #480459

Offline

 

#15  2012-09-24 22:21:37

  qluk - Pan inż. Cyc

qluk
Pan inż. Cyc
Skąd: Katowice
Zarejestrowany: 2006-05-22

Re: Przetwarzanie pliku tekstowego

Jacekalex: uczepiłeś się jak rzep, to weż i napisz mu soft który bedzie do sysloga to robił. To że pisze PING nie znaczy że zostało wywołane /usr/bin/ping. Na dobrą sprawę to może być odpytanie czy czujka zwraca zielony kwadrat. Na cholerę wyważasz otwarte drzwi. Po co ma sobie dokładać roboty i wykraczać poza obowiązki skoro to co dostaje jest wystarczające i specjalnie od eksportu CSV się nie różni.

Offline

 

#16  2012-09-25 17:56:11

  prosze - Użytkownik

prosze
Użytkownik
Zarejestrowany: 2012-09-25

Re: Przetwarzanie pliku tekstowego

Zamiast napisać chłopakowi gotowca to się sprzeczacie.

Pisane na szybko:

Kod:

awk -F "00 |;P" '/ \./;/PING/{getline a; if($2!~/00:00/) print $0 "\n" a }' log

Drukuje taki wynik:

Kod:

userpc@userpc-desktop:~/Pulpit$ awk -F "00 |;P" '/ \./;/PING/{getline a; if($2!~/00:00/) print $0 "\n" a }' log
;WWA - Zachodni .234;;;;;
19:27:30";00 00:03:51;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 16:30:39;"2012-09-16
16:33:31";00 00:02:52;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 16:22:39;"2012-09-16
16:24:30";00 00:01:50;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 09:07:39;"2012-09-16
08:57:37";00 00:01:58;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 05:44:39;"2012-09-16
02:27:29";00 00:01:50;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 00:39:39;"2012-09-16
00:42:29";00 00:02:51;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 23:08:32;"2012-09-16
;TOR - PEC Aleks .222;;;;;
04:07:36";00 00:01:50;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 03:55:46;"2012-09-16
04:01:53";00 00:01:08;PING Site Availability  outage identified. Did not receive expected response within timeout 10000 ms.;
;critical;2012-09-16 03:54:02;"2012-09-16
userpc@userpc-desktop:~/Pulpit$

Ostatnio edytowany przez prosze (2012-09-25 17:59:22)

Offline

 

#17  2012-09-26 07:00:54

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: Przetwarzanie pliku tekstowego

qluk napisał(-a):

Jacekalex: uczepiłeś się jak rzep, to weż i napisz mu soft który bedzie do sysloga to robił. To że pisze PING nie znaczy że zostało wywołane /usr/bin/ping. Na dobrą sprawę to może być odpytanie czy czujka zwraca zielony kwadrat. Na cholerę wyważasz otwarte drzwi. Po co ma sobie dokładać roboty i wykraczać poza obowiązki skoro to co dostaje jest wystarczające i specjalnie od eksportu CSV się nie różni.

@qluk
Nie czepiam się, tylko proponuję.
W dodatku, jedna uwaga:
Jakiś zasrany producent albo "fachowiec" zrobił "superzajefajnyprogram" - co sprawdza pingiem zdalne hosty, i zapisuje wynik badania w pliku csv dla exela,
w dodatku nie ma żadnej możliwości, żeby takiego pajaca lub producenta zmusić do tego, żeby program działający na Linuxie spełniał podstawowe standardy Linuxa.
I ten program nie ma żadnego cywilizowanego wyjścia funkcji - żeby wyciągnąć jakąś sensowną informację na poziomie Linuxa, poza zasranym CSV?

Piszesz, żebym ja napisał jakiś moduł do tego szajsprogramu, lub nowy od zera?
A ja bym najpierw poprosił producenta, jeśli to nie pomoże, to  zrobił o problemie z producentem malutką stronkę, i wysłał mu linka.

Albo po prostu wypierdolił wypociny jakiegoś durnia, postawił Nagiosa albo Zabbixa, albo jeden z kilkunastu podobnych gotowych programów, albo rzeczywiście, naskrobał jakiś "pingownik" w perlu, z insertem wyniku do bazy SQL, Sysloga, i wysłaniem maila lub wiadomości xmpp jak host nie odpowie na 3 pingi w ciągu 15 minut.

Programista ze mnie żaden, może by mi to zajęło z tydzień, ale ja wiem, i Ty też wiesz, ze to ani niewykonalne, ani specjalnie trudne.

Inna sprawa, ze względem szajs-producentów bardzo pomaga delikatna perswazja, np:
- raz miałem kiedyś starcie z Insertem, dotyczące OscGT.
program wywalał ze sklepu produkt, który spadł do zerowego stanu magazynowego, i trzeba było wklepać dany produkt od nowa, zamiast uaktualnić stan magazynowy.
Napisałem do pomocy technicznej, odpisali ze to normalne, i nic nie poradzą.
Zadzwoniłem do jakiegoś ważniaka, - niestety, niemożliwe.
Napisałem na istniejącym wtedy forum Oscommerce, o problemie, pytając przy okazji, czy jest jakiś program zamiast OSCGT i Subiekta, bo mi wypociny Insertu działają na nerwy, a ważniakowi wysłałem sznurka do postu.

Za 2 godziny ważniak odpisał prosząc o logi debug, napisał jak włączyć logowanie w konfigu,  i dał ladres łebka "odpowiedzialnego", natomiast jak dostali logi, to obiecali, ze za dwa dni będzie aktualizacja, i to będzie poprawione.
I rzeczywiście, za 3 dni było po problemie.

Można?

Jak płacisz, to i wymagasz, jak nie płacisz, robisz sam.
Proste?

A każdej firmie co jakiś czas trzeba pokazać  palec jak przeginają , żeby ruszyli jaśniepaństwo  doooopy, Stolarz, Insert czy Nvidia, nie ma żadnej różnicy.  :DDDDDD

Pozdrawiam
;-)

Ostatnio edytowany przez Jacekalex (2012-09-26 07:02:57)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)