Slajd charakteryzuje język awk jako zaawansowane narzędzie do raportowania i strukturalnej analizy danych tabelarycznych.
Zaawansowane przetwarzanie kolumnowe
- Struktura kolumnowa: automatyczny podział wiersza wejściowego na ponumerowane pola ($1, $2, $3 ... $NF).
- Struktura programu: blokowa budowa algorytmu: sekcja wstępna BEGIN, reguły przetwarzania wierszy oraz sekcja końcowa END.
- Separatory pól (-F): możliwość zdefiniowania własnego znaku podziału kolumn (np. dwukropek -F: dla /etc/passwd).
- Pełny język programowania: wbudowane zmienne systemowe (NR - numer wiersza, NF - liczba kolumn), tablice asocjacyjne i funkcje.
Język awk: kompletny w sensie Turinga język programowania zorientowany na przetwarzanie wzorców i danych tabelarycznych, stworzony przez Aho, Weinbergera i Kernighana. Wyróżnia się automatycznym wczytywaniem wierszy, dzieleniem ich na kolumny oraz możliwością definiowania zaawansowanych raportów księgowych i telemetrycznych.
#!/bin/bash
# Przykład 1: Wyświetlenie pierwszej i trzeciej kolumny z wyniku 'ls -l'
# Wynik 'ls -l' wygląda mniej więcej tak:
# -rw-r--r-- 1 user group 1234 Oct 8 22:30 plik.txt
# Chcemy wyciąć 'user' i '1234'
# ls -l | awk '{print "Właściciel:", $3, "Rozmiar:", $5}'
# Przykład 2: Sumowanie rozmiarów plików
# Zsumuj piątą kolumnę (rozmiar) dla wszystkich plików
echo "Obliczanie całkowitego rozmiaru plików w /etc..."
# ls -l /etc | awk '/^-/ {sum += $5} END {print "Całkowity rozmiar:", sum, "bajtów"}'
# /^-/ -> warunek: wykonaj akcję tylko dla linii zaczynających się od '-' (pliki)
# {sum += $5} -> akcja: dodaj wartość 5. pola do zmiennej 'sum'
# END { ... } -> blok specjalny, wykonywany po przetworzeniu wszystkich linii
# Przykład 3: Zmiana separatora pól (opcja -F)
# Przetwarzanie pliku CSV (dane oddzielone przecinkami)
echo "user,pass,uid,gid" > /tmp/data.csv
echo "root,x,0,0" >> /tmp/data.csv
echo "daemon,x,1,1" >> /tmp/data.csv
awk -F',' '{print "Użytkownik:", $1, "ma UID:", $3}' /tmp/data.csv
Awk to język programowania zaprojektowany specjalnie do przetwarzania danych tekstowych, szczególnie tych w formacie kolumnowym. Jego składnia jest podobna do języka C, co ułatwia naukę programistom znającym ten język. Domyślnym separatorem pól w awk są białe znaki, ale można go zmienić za pomocą opcji -F, co jest przydatne przy plikach CSV. Awk automatycznie dzieli każdą linię na pola dostępne jako $1, $2, $3 itd., gdzie $0 reprezentuje całą linię. Blok BEGIN wykonuje się przed przetworzeniem pierwszej linii, a blok END po przetworzeniu ostatniej, co pozwala na inicjalizację i podsumowanie obliczeń. Awk jest często używany do obliczeń statystycznych, agregacji danych i raportowania. W przeciwieństwie do programu sed, program awk lepiej radzi sobie z danymi liczbowymi i oferuje wbudowane funkcje matematyczne. Więcej informacji o standardach powłoki publikuje Polskie Towarzystwo Informatyczne.
Awk może być używany jako samodzielny język programowania, z pełną obsługą pętli, tablic asocjacyjnych i funkcji. W praktyce jednak najczęściej spotyka się go w krótkich jednowierszowcach w potokach, służących do szybkiego wyodrębniania i przetwarzania danych.
Skróty użyte w tym slajdzie:
AWK - akronim od nazwisk twórców: Aho, Weinberger, Kernighan.
NR - Number of Records, wbudowana zmienna awk przechowująca bieżący numer wiersza.
NF - Number of Fields, wbudowana zmienna awk określająca liczbę kolumn w wierszu.
FS - Field Separator, zmienna definiująca separator pól kolumnowych.