Obsługa awk
Co to jest awk?
AWK to potężne narzędzie do przetwarzania i analizy tekstu, szczególnie przydatne do pracy z danymi podzielonymi na kolumny. Pozwala na wyszukiwanie, filtrowanie, formatowanie i agregację danych z plików tekstowych lub wyników innych poleceń.
Podstawowa składnia AWK
awk 'warunek { działania }' plik
Wyjaśnienie:
warunek– wyrażenie logiczne lub wzorzec tekstowy, który musi być spełniony, aby wykonaćdziałania(np. filtrowanie linii).{ działania }– polecenia wykonywane na liniach spełniających warunek (np. wypisanie wybranych kolumn).
Odwołania do pól i zmienne w AWK
$0 # cała linia tekstu wejściowego
$1, $2, … # kolejne kolumny/ pola w linii (domyślnie pola rozdzielone spacjami)
NR # numer bieżącego wiersza (count)
NF # liczba pól w bieżącej linii
Wyjaśnienia:
AWK dzieli każdą linię na pola (domyślnie na spacje/tabulacje). Użycie $1 zwraca pierwszą kolumnę, $2 drugą itd. Zmienna NR oznacza numer bieżącej linii, a NF ilość kolumn w bieżącym wierszu.
Przykłady użycia AWK – pojedyncze komendy
1. Wyświetl pierwszą i trzecią kolumnę każdego wiersza:
awk '{ print $1, $3 }' plik.txt
2. Wyświetl linie, których pierwsza kolumna równa jest "error":
awk '$1 == "error" { print $0 }' plik.txt
3. Sumowanie wartości w kolumnie numer 2:
awk '{ suma += $2 } END { print suma }' plik.txt
Wyjaśnienie: dla każdej linii dodaj wartość pola 2 do zmiennej suma, a na końcu END wypisz wynik.
4. Wypisz numer linii oraz zawartość linii:
awk '{ print NR, $0 }' plik.txt
Wyrażenia regularne (regexp) w AWK
AWK wspiera wyrażenia regularne do dopasowywania tekstu. Można je stosować w warunkach:
awk '/pattern/ { print $0 }' plik.txt
Znajduje i wypisuje linie zawierające pattern.
Można łączyć takie dopasowanie z innymi warunkami i operatorami:
awk '$3 ~ /error/' plik.txt
Wypisuje linie, w których trzecia kolumna zawiera słowo "error".
awk '$2 !~ /^[0-9]+$/' plik.txt
Wypisuje linie, gdzie druga kolumna nie składa się wyłącznie z cyfr.
Przetwarzanie i filtrowanie danych z AWK – bardziej rozbudowane przykłady
Wyświetlanie wierszy, gdzie kolumna 5 jest większa niż 100:
awk '$5 > 100 { print $0 }' plik.txt
Formatowane wypisywanie danych (np. kolumny 1 i 3 oddzielone tabulatorem):
awk '{ printf "%s\t%s\n", $1, $3 }' plik.txt
Podliczanie wystąpień unikalnych wartości w kolumnie 3:
awk '{ counts[$3]++ } END { for (val in counts) print val, counts[val] }' plik.txt
Wywołania specjalne i kontrola przepływu
AWK pozwala na tworzenie bloków BEGIN i END do wykonania instrukcji przed lub po przeczytaniu wszystkich linii:
awk 'BEGIN { print "Start przetwarzania" }
{ print $1 }
END { print "Koniec przetwarzania" }' plik.txt
Pętla i warunki są typowe dla języków programowania, np.:
awk '{
if ($2 > 100)
print $0
else
next
}' plik.txt
Podsumowanie
awkto język i narzędzie do przetwarzania tekstu kolumnowego i linii, idealne do analizowania plików i wyciągania danych.Umożliwia filtrowanie danych na podstawie wyrażeń warunkowych, wyrażeń regularnych (regexp), wykonuje operacje matematyczne i generuje raporty.Znajomość podstawowych zmiennych ($0, $1, NR, NF) i konstrukcji (BEGIN, END, if, pętla) pozwala na tworzenie zaawansowanych skryptów analitycznych.
Dzięki podziałowi na pojedyncze komendy i bloki wraz z objaśnieniami łatwo je kopiować i używać na co dzień.