Spis treści

AWK / GAWK / NAWK

Użycie awk w wierszu poleceń:

awk [opcje] 'skrypt' plik...
cat plik | awk [opcje] 'skrypt'

Skrypt awk składa się ze wzorców i działań (poleceń), które są wykonywane dla wierszy pasujących do danego wzorca.

Ogólna składnia skryptu awk to:

pattern { action }

Przykład:

awk '/pattern/ { print $0 }' file.txt

wypisze wszystkie wiersze z pliku file.txt zawierające słowo „pattern”.

Procedura działania awk:

  1. Wczytanie wiersza z pliku wejściowego (lub ze standardowego wejścia)
  2. Podzielenie wiersza na pola ($1, $2 itd.) według separatora (domyślnie białe znaki)
  3. Sprawdzenie, czy wiersz pasuje do któregoś ze wzorców
  4. Wykonanie odpowiadającego działania dla pasującego wiersza
  5. Przejście do następnego wiersza i powtórzenie procesu

Zmienne w awk:

Wzorce

Przykłady:
Numerowanie wierszy w pliku:

awk '{ print NR, $0 }' file.txt

Wypisanie drugiego pola każdego wiersza:

awk '{ print $2 }' file.txt

Zsumowanie wartości w pierwszym polu:

awk '{ sum += $1 } END { print sum }' file.txt

Wypisanie nazw użytkowników z pliku /etc/passwd:

awk -F: '$3 >= 1000 { print $1 }' /etc/passwd

Wypisanie numerów UID użytkowników o nazwach zaczynających się na „a”:

awk -F: '$1 ~ /^a/ { print $3 }' /etc/passwd

Najważniejsze opcje awk:

Opcja Opis
-F ustawienie separatora pól (domyślnie biały znak)
-v przypisanie wartości zmiennej przed rozpoczęciem przetwarzania pliku

Działania awk

Przykłady użycia

Wypisanie pierwszych 10 wierszy pliku:

awk 'NR <= 10 { print $0 }' file.txt
awk 'NR > 10 { exit } { print $0 }' file.txt

Wypisanie wierszy zawierających „error”:

awk '/error/ { print $0 }' logfile.txt

Usunięcie pustych wierszy z pliku:

awk 'NF > 0 { print $0 }' file.txt

Zamiana „foo” na „bar” w pliku:

awk '{ gsub("foo", "bar"); print $0 }' file.txt

Zamiana małych liter na wielkie:

awk '{ for(i=1;i<=NF;i++) $i = toupper($i); print $0 }' file.txt

Wypisanie liczby wierszy, wyrazów i znaków w pliku:

awk '{ words += NF; chars += length($0) + 1 } END { print NR, words, chars }' file.txt

Zasoby online