Bash/AWK Wyłuskiwanie zmiennej frazy z tekstu
Moderatorzy: Moderatorzy, Administratorzy
Bash/AWK Wyłuskiwanie zmiennej frazy z tekstu
Mam taki problem:
Potrzebuję wyłuskać z ciągu np: http://www.wp.pl domenę, czyli wp.pl. Dodatkowo ciąg wejściowy jest zmienny, czyli mogę mieć na przykład http://www.wp.pl, ftp.wp.pl lub samo wp.pl. Za każdym razem, jako efekt działania skryptu chcę uzyskać "wp.pl".
Żeby nie było za prosto, przyrostek domenowy składa się jak wiadomo z 2, 3 a nawet 4 znaków (pl, com, info).
Jedyną stałą jest ".".
Reasumując potrzebuję sczytać ciąg teksu do 2 kropki od końca (z jej wyłączeniem) (może zdarzyć się tak że będzie tylko 1 kropka, np w adresie wp.pl).
Macie pomysł jak to zrobić?
Może paść pytanie do czego mi to.
Mam zamiar zrobić bardzo prosty analizator loga named'a. Chcę wiedzieć jakie domeny są odwiedzane najczęściej i na podstawie tej wiedzy dokonywać pewnych optymalizacji w mojej sieci.
Możliwe że istnieje już taki analizator. Jeśli znacie jego nazwę to poproszę
Potrzebuję wyłuskać z ciągu np: http://www.wp.pl domenę, czyli wp.pl. Dodatkowo ciąg wejściowy jest zmienny, czyli mogę mieć na przykład http://www.wp.pl, ftp.wp.pl lub samo wp.pl. Za każdym razem, jako efekt działania skryptu chcę uzyskać "wp.pl".
Żeby nie było za prosto, przyrostek domenowy składa się jak wiadomo z 2, 3 a nawet 4 znaków (pl, com, info).
Jedyną stałą jest ".".
Reasumując potrzebuję sczytać ciąg teksu do 2 kropki od końca (z jej wyłączeniem) (może zdarzyć się tak że będzie tylko 1 kropka, np w adresie wp.pl).
Macie pomysł jak to zrobić?
Może paść pytanie do czego mi to.
Mam zamiar zrobić bardzo prosty analizator loga named'a. Chcę wiedzieć jakie domeny są odwiedzane najczęściej i na podstawie tej wiedzy dokonywać pewnych optymalizacji w mojej sieci.
Możliwe że istnieje już taki analizator. Jeśli znacie jego nazwę to poproszę
Re: Bash/AWK Wyłuskiwanie zmiennej frazy z tekstu
Witam
Mamy nowy rok, więc będę dobry i rzucę gotowcem
Output skryptu:
Chyba taki efekt chciałeś uzyskać. Jednak, znajdź trochę czasu i przeanalizuj sobie ten kod. Poczytaj też o wyrażeniach regularnych.
BTW. Czy tylko mnie wkurza konieczność escapeowania nawiasów oraz pytajnika w wyr. reg. sed'a?
Pozdro,
Paweł
Mamy nowy rok, więc będę dobry i rzucę gotowcem
Kod: Zaznacz cały
#!/bin/bash
data=('http://www.poczta.wp.pl' 'http://www.wp.pl' 'www.poczta.wp.pl' 'www.wp.pl' 'wp.pl' 'http://www.poczta.wp.pl?id=123' 'http://wp.pl?id=123' 'www.poczta.wp.pl?id=123' 'www.wp.pl?id=123' 'wp.pl?id=123')
for l in "${data[@]}"
do
echo -en "${l}\t"
echo ${l} | sed 's@\(.*//\)\?\(.*\.\)\?\([^\./]*\.[^\.?]*\)\(?.*\)\?$@\3@'
done
Kod: Zaznacz cały
http://www.poczta.wp.pl wp.pl
http://www.wp.pl wp.pl
www.poczta.wp.pl wp.pl
www.wp.pl wp.pl
wp.pl wp.pl
http://www.poczta.wp.pl?id=123 wp.pl
http://wp.pl?id=123 wp.pl
www.poczta.wp.pl?id=123 wp.pl
www.wp.pl?id=123 wp.pl
wp.pl?id=123 wp.pl
BTW. Czy tylko mnie wkurza konieczność escapeowania nawiasów oraz pytajnika w wyr. reg. sed'a?
Pozdro,
Paweł
Re: Bash/AWK Wyłuskiwanie zmiennej frazy z tekstu
No ok. a powiedz proszę (niestety, nie mam w tej chwili możliwości sprawdzić u siebie), jak się ten skrypt zachowa w wypadku domeny z "dwuczęściowym rozszerzeniem". np. zamień wp.pl na xxx.com.pl i podaj wynik.
Żeby była jasność - nie mówię, że to nie przejdzie - po prostu nie mam możliwości sprawdzić, a jestem ciekawy, czy przewidziałeś taką opcje.
Żeby była jasność - nie mówię, że to nie przejdzie - po prostu nie mam możliwości sprawdzić, a jestem ciekawy, czy przewidziałeś taką opcje.
Re: Bash/AWK Wyłuskiwanie zmiennej frazy z tekstu
Przecież Ci napisałem wynik działania skryptu, masz tam m.in.:
Czyli skrypt wyłuskuje tylko domeny, bez subdomen. Tobie chodziło o poieranie również subdomen?
Kod: Zaznacz cały
www.poczta.wp.pl wp.pl
www.wp.pl wp.pl
Re: Bash/AWK Wyłuskiwanie zmiennej frazy z tekstu
Wielkie dzięki. Musze się zaznajomić dokładnie z komendą sed
ondreyos miał ma myśli domendę com.pl (czyli coś takiego jak samodzielne pl, eu, com, org).
Przykład www.abc.com.pl <- w tm przypadku domena to abc.com.pl.
ondreyos miał ma myśli domendę com.pl (czyli coś takiego jak samodzielne pl, eu, com, org).
Przykład www.abc.com.pl <- w tm przypadku domena to abc.com.pl.
Re: Bash/AWK Wyłuskiwanie zmiennej frazy z tekstu
Kean - zgadza się.
Jak pisałem wcześniej - nie mam możliwości przetestowania w tej chwili podanego skrytpu, ale w dużym skrócie wygląda to na to, że obcina (jeśli występuje) część po znaku zapytania, a następnie zwraca ostatni segment, kropkę i segment przed kropką.
W takim razie podejrzewam, ze dla domeny poczta.abc.com.pl, zamiast abc.com.pl, zwróci com.pl - i o sprawdzenie takiego wariantu prosiłem/sugerowałem. Nie pytałem o subdomeny, ale sytuację, gdy powinien zwrócić 3 skladniki oddzielone dwoma kropkami, zamiast standardowego zestawu COŚ kropka COŚ.
Jak pisałem wcześniej - nie mam możliwości przetestowania w tej chwili podanego skrytpu, ale w dużym skrócie wygląda to na to, że obcina (jeśli występuje) część po znaku zapytania, a następnie zwraca ostatni segment, kropkę i segment przed kropką.
W takim razie podejrzewam, ze dla domeny poczta.abc.com.pl, zamiast abc.com.pl, zwróci com.pl - i o sprawdzenie takiego wariantu prosiłem/sugerowałem. Nie pytałem o subdomeny, ale sytuację, gdy powinien zwrócić 3 skladniki oddzielone dwoma kropkami, zamiast standardowego zestawu COŚ kropka COŚ.
Re: Bash/AWK Wyłuskiwanie zmiennej frazy z tekstu
Aj.. coś nie możemy się dogadać
Nie inaczej. Tak właśnie będzie. Dokładnie tak zrozumiałem prośbę Autora wątku. Patrz:ondreyos pisze:W takim razie podejrzewam, ze dla domeny poczta.abc.com.pl, zamiast abc.com.pl, zwróci com.pl
Kean, więc w końcu jak skrypt ma działać?Kean pisze:przykład http://www.wp.pl, ftp.wp.pl lub samo wp.pl. Za każdym razem, jako efekt działania skryptu chcę uzyskać "wp.pl".
Re: Bash/AWK Wyłuskiwanie zmiennej frazy z tekstu
Pisał o domenie. Ja rozumiem, że chodzi mu o wyświetlenie wszystkiego po pierwszej kropce.kesay pisze:Kean, więc w końcu jak skrypt ma działać?
Ale jednocześnie bez śmieci na końcu (tak jak w tej chwili).
Re: Bash/AWK Wyłuskiwanie zmiennej frazy z tekstu
kesay, generalnie jest ok. Zapomniałem o domenach dwu składnikowych, typu com.pl i wroc.pl. Jednakże takich domen jest stosunkowo mało i jest to w moim wypadku do zaniedbania. Aby je obsłużyć, trzeba by dodać do skryptu parę caseów i wklepać takie "rodzynki" na sztywno.
Re: Bash/AWK Wyłuskiwanie zmiennej frazy z tekstu
W ogóle moja pierwsza myśl była właśnie, żeby do jakiegoś pliku/bazy wrzucić istniejące domeny (jedno i dwuczęściowe), a następnie wyszukiwać domeny na liście. Potem uznałem, że przekombinowane i w ogóle - ale widzę, że mój pomysł powraca :D