Zaawansowane przetwarzanie kolumnowe
awk to język programowania zaprojektowany do przetwarzania danych tekstowych, zwłaszcza zorganizowanych w kolumny. Domyślnie `awk` dzieli każdą linię wejściową na pola (kolumny) na podstawie białych znaków.
Wewnątrz skryptu `awk` mamy dostęp do tych pól za pomocą zmiennych $1, $2, $3, itd. $0 reprezentuje całą linię.
Podstawowa składnia:
awk 'program'
Program najczęściej ma postać '{ akcja }', gdzie akcja jest wykonywana dla każdej linii wejściowej. Można też dodawać warunki: 'warunek { akcja }'.
#!/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 seda, awk lepiej radzi sobie z danymi liczbowymi i oferuje wbudowane funkcje matematyczne.
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.