awk to nie jest zwykłe polecenie, tylko mały język programowania do przetwarzania tekstu wiersz po wierszu. Sprawdza się wszędzie tam, gdzie dane są ułożone w kolumny (logi, pliki CSV, wynik ps czy df) i chcesz wyciągnąć konkretne pole, coś policzyć albo wygenerować raport. Działa według prostej zasady: dla każdego wiersza, który pasuje do wzorca, wykonuje akcję w nawiasach klamrowych. Domyślnie awk tnie każdą linię na pola po białych znakach, a dostęp do nich masz przez $1, $2 itd., gdzie $0 to cała linia.
Składnia i najważniejsze opcje
Podstawowa forma to awk 'wzorzec {akcja}' plik. Wzorzec albo akcję można pominąć — sam wzorzec drukuje pasujące linie, sama akcja wykonuje się dla każdej linii.
-F— ustawia separator pól wejściowych, np.-F:albo-F','.-v zmienna=wartosc— przekazuje zmienną do programu przed startem (np.-v prog=12).-f plik.awk— czyta program z pliku zamiast z linii poleceń (przydatne dla dłuższych skryptów).NR— numer bieżącego wiersza (licznik wszystkich wczytanych linii).NF— liczba pól w bieżącym wierszu;$NFto ostatnie pole.FS/OFS— separator pól wejścia / wyjścia (alternatywa dla-F).BEGIN { }/END { }— bloki wykonywane raz, przed pierwszą i po ostatniej linii.print/printf— wypisanie pól;printfdaje kontrolę nad formatem.
Przykłady użycia
awk '{print $1}' dostep.log— wypisuje pierwszą kolumnę z każdej linii (np. adresy IP z logu).awk -F: '{print $1, $7}' /etc/passwd— pokazuje nazwę użytkownika i jego powłokę, rozdzielając pola dwukropkiem.awk '$3 > 100' dane.txt— drukuje tylko te wiersze, w których trzecia kolumna jest większa niż 100.awk '{suma += $5} END {print suma}' raport.csv— sumuje wartości z piątej kolumny i wypisuje wynik na końcu.awk 'NR >= 10 && NR <= 20' plik.txt— wyświetla wiersze od 10 do 20 (mini-zamienniksed -n).
Częste błędy i pułapki
Pierwsza pułapka to cudzysłowy: program awk trzymaj w pojedynczych apostrofach '...', bo w podwójnych powłoka rozwinie $1 i zostaniesz z pustką. Druga: w awk zmienne nie mają znaku dolara — $1 to pole, ale własna zmienna to po prostu suma, nie $suma. Pamiętaj też, że domyślny separator to dowolna sekwencja białych znaków, więc tabulatory i wielokrotne spacje są traktowane jak jeden — przy plikach CSV z pustymi polami ustaw -F',' jawnie. Co do wersji: na Linuksie zwykle masz GNU awk (gawk) z bogatymi rozszerzeniami, a na macOS i BSD domyślnie siedzi okrojony nawk — część funkcji (np. gensub czy strtonum) tam nie zadziała, więc skrypty pisane pod gawk potrafią się wywalić na Macu.
Powiązane komendy: sed, grep, cut, sort, tr.