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
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ść:
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:
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ę.
sierpień 7, 2008 @ 10:55 pm
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;)