AWK jest językiem interpretowanym, którego główną funkcją jest przetwarzanie danych. Nazwa pochodzi od nazwisk jego twórców Alfreda V. Aho, Petera Weinbergera i Briana Kernighana.
Wykonywanie tego skryptu polega na przetwarzaniu danych tekstowych linia po linii i stosowaniu do nich określonych akcji. Każda linia dzielona jest przez skrypt na pola (domyślnie separatorem jest spacja lub tabulator). Zmienna $0 oznacza całą linię, natomiast $1 pierwsze pole, $2 drugie pole itd.
Część wzorzec odpowiada za to, które linie będą brane pod uwagę. Natomiast część akcja odpowiada za to w jaki sposób zostaną one przetworzone. Jeżeli nie będzie części wzorzec akcja wykona się dla każdej linii. Natomiast jeżeli nie zdefiniowano akcji wybrane linie zostaną jedynie wyświetlone, ponieważ domyślną akcją jest akcja drukuj linie.
Przykład 1
treść skryptu:
owi@laptop:~$ awk '{printf $0}' dane
Ponieważ w treści skryptu brakuje wzorca skrypt wykona się dla każdej linii. Na ekranie zostanie wypisana każda linia z pliku dane.
Przykład 2
treść skryptu:
owi@laptop:~$ awk '$2>10' dane
Brakuje akcji więc zostaną wyświetlone tylko te linie w których w drugiej kolumnie znajduje się wartość wieksza niż 10.
Przykład 3
treść skryptu:
owi@laptop:~$ awk '$2>10 {printf $1}' dane
Tym razem jest zarówno akcja jak i wzorzec. Wzorzec mówi, że pod uwagę będą brane jedynie te linie w których wartość w drugiej kolumnie jest większa od 10 natomiast akcja z tych linii wypiszę jedynie pierwszą kolumnę z pliku dane.
Przykład 4
treść skryptu:
owi@laptop:~$ awk '$1==”ala” {printf $2}' dane
Dla linii w których w pierwszej kolumnie znajduje się słowo ala zostanie wypisana druga kolumna.
BEGIN i END
Skrypt jest wykonywany dla określonych we wzorcu linii pliku dane. Aby pewna czynność została wykonana na samym początku przed zinerpretowaniem pierwszej linii należy użyć dyrektywy BEGIN.
Na samym początku pojawi się tekst „login liczba”, a następnie zostanie wykonane polecenie $4>10 {print $1,$2}.
Zmienne
Znajduje się kilka takich zmiennych wbudowanych w język, których inicjowane są automatycznie np: NR-liczba aktualnie przetwarzanej linii, FS-separator pól, NF - liczba pól w bieżącej linii.
Przykład 6
W pliku /etc/passwd znajdują dane, których kolumny nie są oddzielone, ani spacjami, ani tabulatorami, a znakami „:”. Aby wypisać z nich przykładowo 2 kolumnę trzeba więc przed przetworzeniem pierwszej linii dać sygnał, że separatorem między kolumnami jest znak „ : ”. Do zmiany separatora posłuży zmienna FS.