dawoz@gtwlenovo

Liznąć awk.

Posted by: dawoz on: lipiec 11, 2008

Timbaland & Magoo – Cop that shit ( feat. Missy Elliot)

AWK liznąłem trochę w pierwszym semestrze studiów na Językach Formalnych, jednak wtedy nie zdawałem sobie sprawy z możliwości, jakie niesie ta maszynka i ile przy pisaniu programów w tym języku może być zabawy : ) Nie będę się rozwodził tutaj nad tym, co to jest AWK, ani dawał “miniporadnika” ( bo sami zobaczycie za chwilę ), za to odsyłam Was tutaj, znajdziecie tam dużo ciekawych informacji. Ale wracając do tematu pokażę Wam, jak można się bawić z AWK : ) Od zawsze podobały mi się emoticony na deviancie m i b i pomyślałem, że fajnie byłoby mieć je u siebie, nie zapisując każdej po kolei prawym klawiszem myszy. Zapisałem więc sobie źródło strony z emoticonami w pliki in.html i przejrzałem kod. Okazało się, że link do emotki znajduje się zawsze na 4. polu w wierszu. Aby wyciągnąć to pole do osobnego pliku piszemu:

awk '{ print $4 }' in.html > krok1

Teraz mamy w pliku krok1 mniej tekstu, natomiast nas interesują wszystkie niepuste linie, które zawierają mniej więcej taką wartość:

  • src=”http://e.deviantart.com/emoticons/f/film.gif”

Czyli zaczynające się od wyrażenia regularnego “src”, idąc tym tropem dajemy:

awk '/^[src]/ {print;}' krok1 > krok2

Pozbyliśmy się właśnie wszystkich śmieci, które były poza linijkami nas interesującymi, dalej robimy tak:

awk 'gsub(/(\")|(src=)/,"",$0)' krok2 > krok3

Śpieszę z tłumaczeniem  - gsub to funkcja która szuka wzorca w naszym przypadku jest to ” (cudzysłowie) oraz “src=” i zamienia je na… no własnie na nic, więc po prostu wycina. Tak więc teraz w pliku krok3 znajdują się same linki postaci:

  • http://e.deviantart.com/emoticons/f/film.gif

Teraz pozostaje nam już tylko ściągniecie naszych emotek : )

awk 'system("wget \""$0"\" ")' krok3

I na ekranie pokaże się wynik pracy programu wget, po wylistowaniu katalogu ukażą się nam nasze emotikonki : ) AWK może być wykorzystywane w wielu bardzo różnych przypadkach, łączyć je można z poleceniami systemowymi oraz skryptami w bashu, co daję duuuużo możliwości. W zakładce pliki jest “skrypt” w bashu, dzięki któremu możemy zautomatyzować ten proces. : )
Z tego miejsca chciałbym serdecznie podziękować ZoczuS’owi za inspirację, zaszczepienie we mnie zainteresowania do awk, cierpliwość oraz wielkrotne rozjaśnianie zawiłości awk : ) Zachęcam Was również do zainteresowania się awk, bo ja na tym na pewno nie poprzestanę.

Odpowiedzi: 2 do "Liznąć awk."

ja bym akurat uzyl sed’a i zrobil tak:

grep -i ‘<img src=”http://e.deviantart.com/emoticons’ plik_pobrany_z_devianta | sed -n -e ’s/.*\(http\:\/\/.*\.gif\).*/\1/p’ | wget -i -

mniej wywolanych polecen no i nie operujemy na plikach wiec powinno byc szybciej

btw-cwiczenia z awk byly chyba jednymi z ciekawszych zajec na pierwszym semestrze hehe;)

no krócej. fakt. virhilo sprawdzałeś, czy to działa? :P ale seda jeszcze nie używałem : ) generalnie muszę z tym coś pokombinować. i taaak, awk to były ciekawe zajęcia, szkoda tylko, że dr Cybulka nie pokazywała nam jakie to ma ciekaw zastosowania : ) Zoczus np. jest programistą awk. profesjonalnym :D

Dodaj komentarz