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/.
Strony: 1
Mam taki problem, chce wyciągnąć kilka informacji z 2 osobnych plików, z tym że w pierwszym pliku informacje się powtarzają a chce wyciągnąć je tylko raz bez dublowania.
Informacje które chcę wyciągnąć to
Data
Packet-Type = Access-Accept (nie musi być tego pola ale musze wiedzieć czy użytkownik dostał akceptację)
User-Name
NAS-IP-Address
Called-Station-Id
Calling-Station-Id
Plik 1:
Mon Oct 17 17:13:31 2011 Packet-Type = Access-Request User-Name = "user" NAS-IP-Address = 192.168.0.50 NAS-Port = 0 Called-Station-Id = "00195b54c564" Calling-Station-Id = "001f5bb7c6a0" NAS-Identifier = "Realtek Access Point. 8181" NAS-Port-Type = Wireless-802.11 Service-Type = Framed-User Connect-Info = "CONNECT 11Mbps 802.11b" EAP-Message = 0x020200061900 State = 0x26bdee6e27bff763f0a3e9a1e78a85de Message-Authenticator = 0xb6e0fa3a84387975dd623c6b2ef71165 Mon Oct 17 17:13:31 2011 Packet-Type = Access-Request User-Name = "user" NAS-IP-Address = 192.168.0.50 NAS-Port = 0 Called-Station-Id = "00195b54c564" Calling-Station-Id = "001f5bb7c6a0" NAS-Identifier = "Realtek Access Point. 8181" NAS-Port-Type = Wireless-802.11 Service-Type = Framed-User Connect-Info = "CONNECT 11Mbps 802.11b" EAP-Message = 0x020300061900 State = 0x26bdee6e24bef763f0a3e9a1e78a85de Message-Authenticator = 0x556c829f8c3ff3c31913380f9c445c51 Mon Oct 17 17:13:31 2011 Packet-Type = Access-Request User-Name = "user" NAS-IP-Address = 192.168.0.50 NAS-Port = 0 Called-Station-Id = "00195b54c564" Calling-Station-Id = "001f5bb7c6a0" NAS-Identifier = "Realtek Access Point. 8181" NAS-Port-Type = Wireless-802.11 Service-Type = Framed-User Connect-Info = "CONNECT 11Mbps 802.11b"
Plik 2:
Mon Oct 17 17:13:31 2011 Packet-Type = Access-Accept MS-MPPE-Recv-Key = 0x0790f92012023074ac3d4bb98da2287b20e1d7ecf0391f9b17d11197dbb402ca MS-MPPE-Send-Key = 0xadec40c8be2eb3fa9dc9ff298ef60021072d755b48b3218c522047e172af04ef EAP-MSK = 0x0790f92012023074ac3d4bb98da2287b20e1d7ecf0391f9b17d11197dbb402caadec40c8be2eb3fa9dc9ff298ef60021072d755b48b3218c522047e172af04ef EAP-EMSK = 0xcf5d870377d72089fbda59323b1323bfc918719469b8edcc2da53035d011e96346378efae6f53a8844448f523c68a9130f8533a5ff74bacae6e214f988b41378 EAP-Message = 0x03090004 Message-Authenticator = 0x00000000000000000000000000000000 User-Name = "user"
Po modyfikacji powinno to wyglądac mniej więcej tak:
Mon Oct 17 17:13:31 2011
User-Name = "user"
NAS-IP-Address = 192.168.0.50
Called-Station-Id = "00195b54c564"
Calling-Station-Id = "001f5bb7c6a0"
Ostatnio edytowany przez czeri (2011-10-25 20:17:33)
Offline
No dobrze, i w czym konkretnie masz problem?
(Odpowiadając na pytanie z tematu: tak, to da się zrobić.)
Offline
Przepraszam, może źle sprecyzowałem pytanie, niebardzo wiem jak to zrobić, wiem jak wyciągnąć dane z 2 pliku, ale z pierwszego gdzie dane są zdublowane wogóle niewiem jak sie za to zabrać. I czy mógłbym ktoś mi pomóc stworzyć takie zapytanie aby dało mi taki rezultat jaki napisałem ?
Offline
Możesz skorzystać z polecenia sort (z flagą -u, aby uniknąć wykorzystywania polecenia uniq). Możesz również wykorzystać flagę -m polecenia grep.
Jeżeli chcesz pracować na obu plikach jednocześnie (na podstawie Twojego drugiego postu nie jestem już tego pewien; w plikach powtarza się m.in. data i pole User-Name), to musisz najpierw wykorzystać polecenie cat zgodnie z jego pierwotnym przeznaczeniem (nazwa wywodzi się od conCATenate), czyli połączyć oba pliki w jeden i dopiero przekazać do grepa czy czegokolwiek innego. Byłaby to chyba pierwsza sytuacja, w której zapis cat |grep ma sens, z jaką się spotykam w życiu.
Offline
jeśli użyje sort to nie uzyskam takiej kolejności jaką bym chciał, myślałem żeby przekopiować oba pliki do jednego i tam zrobić tak by usunąć rzeczy które się powtarzają, ale nie umiem znaleźć polecenia na usuwanie danych z pliku (niewiem czy takie polecenie istnieje). Jest ktoś w stanie mi pomóc.
Powiem dlaczego chce takie coś osiągnąć. Mam logi radiusa które są przechowywane w swoich plikach w jednym są zapytania w drugim akceptacje. Niestety w pliku z akceptacją niema danych które są mi potrzebne do pełnego zlokalizowania użytkownika. (mac adres użytkownika, mac adres punktu dostępowego)
Dane tak uzyskane chcę w przystępny sposób za pomocą php-a wyświetlić na stronie (ale żeby je wyświetlic na stronie musze mieć je jakoś uporządkowane i do tego sprowadza się cały problem..
Ostatnio edytowany przez czeri (2011-10-26 17:02:44)
Offline
Ale skoro masz to wyświetlać na stronie internetowej, dlaczego od razu nie napisać tego w PHP?
Możesz wczytać oba pliki do jednej tablicy, przy pomocy grepa (funkcja PHP) wyciągać linijki spełniające odpowiednie kryterium i potem przypisywać do zmiennej tylko pierwszy element z tej tablicy tymczasowej. Pewnie i da się to jakoś bardziej elegancko rozwiązać (sądzę że moduł do przetwarzania plików INI może się okazać pomocny), ale to taka propozycja na szybko. Akurat w PHP jestem znacznie mniej biegły niż w shellu.
Ewentualnie jeśli już to musi być w shellu, to mimo to użyj polecenia sort (bo spełnia swoje zadanie) a na poziomie PHP manipuluj kolejnością przedstawienia wyników. Co to za problem?
Od biedy możesz nawet w tym shellu przypisywać poszczególne linie do zmiennych a później w preferowanej kolejności zapisywać je w tymczasowym pliku tekstowym (który potem odczyta PHP).
Offline
mam coś takiego:
{ awk '{ $1=""; print $0; }' freeradius/radius.log; cat /var/log/dhcpd.log ; } | sort -k 1M,2 -k 2n,3 -k 3,4 -k 4r,5
co w rezultacie daje mi takie coś:
Oct 27 17:49:00 debian6 dhcpd: DHCPREQUEST for 192.168.0.5 from 00:0c:29:20:40:ab via eth0 Oct 27 17:49:08 debian6 dhcpd: DHCPREQUEST for 192.168.0.5 from 00:0c:29:20:40:ab via eth0 Oct 27 17:52:07 2011 : Auth: Login OK: [user] (from client localhost port 0) Oct 27 17:52:40 2011 : Auth: Login OK: [user] (from client 192.168.0.50/32 port 0 cli 001f5bb7c6a0) Oct 27 17:52:40 2011 : Auth: Login OK: [user] (from client 192.168.0.50/32 port 0 cli 001f5bb7c6a0 via TLS tunnel)
więc jest już poniekąd to co chciałem osiągnąć chciałem tą samą operację zrobić w php za pomocą funkcji exec, ale nie rusza.
Wiecie jak to zrobić żeby php mi to wyswietlił ?
Offline
Udało mi się stworzyć coś takiego, nie jest to szczyt programistyczny ale działa
$plik = implode(',', file('/var/log/dhcpd.log')); $tablica = explode(",", $plik); $n = count($tablica); $zmienna=1; $wyrazenie = "/DHCPACK/"; for ($i=0;$i<$n; $i++) { $tekst=$tablica[$i]; if (preg_match($wyrazenie, $tekst)) { $tabliczka[$zmienna]=$tablica[$i]; $zmienna+=1; } } $plik = implode(',', file('/var/log/freeradius/radius.log')); $tablica = explode(",", $plik); $n = count($tablica); $wyrazenie = "/TLS/"; for ($i=0;$i<$n; $i++) { $tekst = $tablica[$i]; if (preg_match($wyrazenie, $tekst)) { $tabliczka[$zmienna]=$tablica[$i]; $zmienna+=1; } } for ($i=0;$i<$zmienna; $i++){ echo $tabliczka[$i].'<br />'; }
wynik jest taki:
Oct 26 21:12:49 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 26 21:13:09 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 26 21:13:11 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 26 21:32:22 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 26 21:35:20 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 27 17:20:57 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 27 17:21:12 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 27 17:25:22 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 27 17:25:27 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 27 17:49:00 debian6 dhcpd: DHCPACK on 192.168.0.5 to 00:0c:29:20:40:ab via eth0 Nov 1 09:56:50 debian6 dhcpd: DHCPACK on 192.168.0.5 to 00:0c:29:20:40:ab via eth0 Nov 1 10:07:04 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Wed Oct 26 21:13:08 2011 : Auth: Login OK: [user] (from client 192.168.0.50/32 port 0 cli 001f5bb7c6a0 via TLS tunnel) Wed Oct 26 21:32:18 2011 : Auth: Login OK: [user] (from client 192.168.0.50/32 port 0 cli 001f5bb7c6a0 via TLS tunnel) Thu Oct 27 17:20:53 2011 : Auth: Login OK: [user] (from client 192.168.0.50/32 port 0 cli 001f5bb7c6a0 via TLS tunnel) Thu Oct 27 17:25:17 2011 : Auth: Login OK: [user] (from client 192.168.0.50/32 port 0 cli 001f5bb7c6a0 via TLS tunnel) Thu Oct 27 17:52:40 2011 : Auth: Login OK: [user] (from client 192.168.0.50/32 port 0 cli 001f5bb7c6a0 via TLS tunnel) Tue Nov 1 10:07:00 2011 : Auth: Login OK: [user] (from client 192.168.0.50/32 port 0 cli 001f5bb7c6a0 via TLS tunnel)
Teraz pytanie jak zrobić żeby z tej tablicy wyciągnąć kilka danych i wsadzić je do tabeli html-owej
tabela miała by strukture:
data - login - adres_ip - mac_adres
Offline
Strony: 1