
| AWK - Scurt tutorial |
|
| Written by Anea Andrei | |
|
AWK este un limbaj interpretat care ne usureaza munca. Numele lui vine de la initalele numelor autorilor ( Aho, Weinberger si Kernighan ). Punctul forte al acestui limbaj este usurinta cu care putem interpreta si prelucra textele putand foarte usor sa creem rapoarte, sa facem statistici si calcule matematice pe baza unui fisier text. AWK poate fi folosit atat ca limbaj de scripting cat si ca si comanda. Sa vedem cateva exemple care vor ajuta la formarea unei idei despre ce poate face acest limbaj. a) Cautarea unui sir de caractere intr-un fisier text: Folosim ca si exemplu fisierul /etc/passwd care este scris in text plan si cautam cuvantul 'mail'. Cel mai simplu mod e sa facem asta din linia de comanda folosind urmatoarea sintaxa: Cod:$ awk '/sir de cautat/' fisier.txt In cazul nostru comanda si rezultatul sunt dupa cum urmeaza: Cod:33996344 33996351 GB GBR UNITED KINGDOM
MyUser@server$ awk '/mail/' /etc/passwd Cod:
Probabil unora vi se pare cunoscut fisierul. Pentru cei care nu stiti ce sunt liniile de mai sus, e vorba de o parte dintr-un fisier mai mare care contine IP-urile alocate fiecarei tari. Cod:MyUser@server$ awk '/UNITED STATES/' ip.txt Nimic deosebit fata de celalalt exemplu, nu ? OK, acum ne-am "prins" cum se pot selecta liniile corespunzatoare statelor unite, dar pe noi ne intereseaza doar primele doua coloane si nimic mai mult. Nu e nici o problema. Extindem putin comanda si din awk '/UNITED STATES/' ip.txt o transformam in awk '/UNITED STATES/ {print $1,$2}' ip.txt. Rezultatul afisat va fi dupa cum urmeaza: Cod:MyUser@server$ awk '/UNITED STATES/ {print $1,$2}' ip.txtCe s-a intamplat, de fapt ? awk a cautat in fisierul ip.txt toate liniile care contineau sirul de caractere 'UNITED STATES' iar apoi pentru fiecare linie gasita a aplicat regula {print $1,$2} care ii spune sa afiseze doar coloana 1 si 2. Dupa cum v-ati prins, cu simbolul dolar se specifica coloana care ne intereseaza. Daca ne interesau doar coloanele 3 si 4 foloseam in loc de {print $1,$2}, {print $3,$4} iar rezultatul afisat era format din 6 linii de forma: US USA. Cod:MyUser@server$ awk '{ if($1<100000000) print $0}' ip.txtDupa cum se vede, conditia a fost aplicata cu succes si toate liniile care au pe prima coloana o valoare mai mica de 100000000 sunt afisate. Daca ne interesau doar rezultatele din statele unite, putem adauga din nou criteriul de sortare dupa cum am fost obisnuiti din exemplele anterioare: Cod:MyUser@server$ awk '/UNITED STATES/ { if($1<100000000) print $0}' ip.txtc) Contorizarea Cod:MyUser@server$ awk 'END {print NR}' ip.txtDa... e simplu. Am folosit END care este un termen nou si care merita putina atentie. Normal, un script AWK sau o comanda arata in felul urmator: Cod:awk 'BEGIN Ce intelegem din asta ? Un script e delimitat in mod normal de BEGIN care ne spune unde incepe scriptul si END care ne arata finalul scriptului. In exemplele de mai sus nu am folosit aceste doia cuvinte cheie pentru ca am folosit un singur criteriu de cautare si o actiune asociata caz in care BEGIN si END nu e obligatoriu sa apara. Cod:MyUser@server$ awk 'END {print NR, " linii citite"}' ip.txtMyUser@server$ [ Sursa: skullbox.info ] b) Cautarea unui sir si afisarea selectiva Exemplul anterior nu arata nimic iesit din comun. E simplu de cautat un cuvant intr-un fisier in orice editor de texte care se respecta. Haideti sa vedem un exemplu mai complex in care nu ne mai putem folosi de un simplu editor de texte. Pentru exemplificare folosesc un fisier, ip.txt, care tine datele in format TSV (Tab Separated Values). Fisierul are urmatorul continut:
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> |
| Acasa |
| Tutoriale Windows |
| Tutoriale SEO |
| Tutoriale Firefox |
| Tutoriale Diverse |
| Tutoriale CMS |
| Tutoriale Yahoo |

