1. Wprowadzenie do awk
awk — to potężne narzędzie tekstowe do przetwarzania danych. Wyobraź sobie plik tekstowy jako tabelę, gdzie wiersze to wiersze (logiczne), a kolumny to dane oddzielone spacjami. Wtedy awk staje się naszym najlepszym kumplem. Pomoże szybko wybierać kolumny, filtrować wiersze, formatować dane, a nawet wykonywać operacje arytmetyczne.
Został nazwany na cześć swoich autorów — Alfred Aho, Peter Weinberger i Brian Kernighan (tak, tego samego, który brał udział w tworzeniu języka C).
Główna idea awk — przetwarzanie danych za pomocą wzorców i działań, co czyni go swego rodzaju mini-językiem programowania.
Składnia awk
Podstawowa składnia komendy wygląda w ten sposób:
awk 'wzorzec {działanie}' plik
wzorzec— warunek, który jest sprawdzany dla każdego wiersza pliku.działanie— operacje wykonywane na wierszach pasujących do wzorca.- Jeśli wzorzec jest pominięty, działanie jest wykonywane dla każdego wiersza.
Przykład:
awk '{print $1}' dane.txt
Ta komenda wypisze pierwszą kolumnę ($1) dla każdego wiersza pliku dane.txt.
2. Główne możliwości awk
1. Wybór kolumn
Najprostszy sposób użycia awk to wybór jednej lub kilku kolumn z pliku. Pole oznacza się jako $n, gdzie n to numer kolumny, licząc od 1.
Przykład:
Wypisz pierwszą i trzecią kolumnę:
awk '{print $1, $3}' data.txt
Załóżmy, że nasz plik data.txt wygląda tak:
John 25 Engineer
Jane 30 Designer
Mike 28 Developer
Rezultat:
John Engineer
Jane Designer
Mike Developer
2. Warunkowe przetwarzanie wierszy
Warunki pozwalają przetwarzać tylko te wiersze, które spełniają określone kryteria.
Przykład:
Wypisz wiersze, gdzie wartość w drugiej kolumnie jest większa niż 27:
awk '$2 > 27 {print $1, $2}' data.txt
Rezultat:
Jane 30
Mike 28
3. Operacje arytmetyczne
awk może wykonywać operacje arytmetyczne. To przydatne, kiedy trzeba coś obliczyć "w locie".
Przykład:
Dodaj 10 do wartości w drugiej kolumnie:
awk '{print $1, $2+10}' data.txt
Rezultat:
John 35
Jane 40
Mike 38
4. Liczenie wierszy
awk automatycznie wie, ile wierszy zostało przetworzonych. Ta informacja jest przechowywana w zmiennej NR (Number of Records).
Przykład:
Policz liczbę wierszy w pliku:
awk 'END {print NR}' data.txt
Rezultat:
3
3. Zaawansowane możliwości
1. Formatowanie wyjścia
awk obsługuje potężne formatowanie wyjścia za pomocą funkcji printf. To jest odpowiednik funkcji printf w C.
Przykład:
Wypisać dane z wyrównaniem:
awk '{printf "%-10s %-5s %-10s\n", $1, $2, $3}' data.txt
Wynik:
John 25 Engineer
Jane 30 Designer
Mike 28 Developer
2. Zmienne
Możesz używać zmiennych do przechowywania danych i upraszczania pracy.
Przykład:
Obliczyć sumę drugiej kolumny:
awk '{sum += $2} END {print "Całkowity wiek:", sum}' data.txt
Wynik:
Całkowity wiek: 83
3. Wyrażenia regularne
awk obsługuje wyrażenia regularne do wyszukiwania wierszy.
Przykład:
Wypisać wiersze, w których w pierwszej kolumnie jest litera J:
awk '/J/ {print $0}' data.txt
Wynik:
John 25 Engineer
Jane 30 Designer
4. Przykład w praktyce
1. Analiza dziennika systemowego
Załóżmy, że mamy plik dziennika systemowego /var/log/syslog i chcemy dowiedzieć się, które procesy najczęściej są wymieniane.
Polecenie:
cat /var/log/syslog | awk '{print $5}' | sort | uniq -c | sort -nr | head -10
Co robi to polecenie:
cat /var/log/syslog— czyta zawartość pliku.awk '{print $5}'— wyciąga piątą kolumnę (nazwa procesu).sort— sortuje wiersze alfabetycznie.uniq -c— zlicza liczbę unikalnych wierszy.sort -nr— sortuje wiersze malejąco według wartości liczbowych.head -10— wypisuje top 10 procesów.
2. Przygotowanie raportu o wynagrodzeniach
Mamy plik salaries.txt:
John 25 4000
Jane 30 5000
Mike 28 4500
Zadanie:
Zwiększ wynagrodzenie o 10% i wyświetl końcowy raport.
Rozwiązanie:
awk '{new_salary = $3 * 1.1; printf "%-10s %-5s %-10.2f\n", $1, $2, new_salary}' salaries.txt
Wynik:
John 25 4400.00
Jane 30 5500.00
Mike 28 4950.00
5. Częste błędy podczas pracy z awk
Problemy z separatorami
Domyślnie awk używa spacji lub tabulacji jako separatora. Jeśli twoje dane są rozdzielone czymś innym (np. przecinkami lub dwukropkami), musisz to określić za pomocą opcji -F.
Przykład:
Plik data.csv:
John,25,Engineer
Jane,30,Designer
Mike,28,Developer
Komenda do pracy z CSV:
awk -F',' '{print $1, $3}' data.csv
Wynik:
John Engineer
Jane Designer
Mike Developer
Pomijanie pól z powodu złego formatu
Czasami wiersze mogą zawierać niespodziewane spacje lub brakujące kolumny. To może powodować błędy. Zawsze warto sprawdzić dane przed rozpoczęciem pracy.
Praktyczne zastosowanie
Właśnie nauczyłeś się używać awk, aby analizować logi systemowe, przetwarzać dane o wynagrodzeniach i tworzyć raporty. Te umiejętności pomogą ci w pracy z dużymi bazami danych, plikami CSV i dziennikami w prawdziwych projektach. Jeśli pracujesz w DevOps, analiza logów systemowych przy pomocy awk stanie się twoją supermocą. A jeśli jesteś programistą, to świetny sposób na szybkie manipulowanie danymi bezpośrednio z terminala.
Aby lepiej zrozumieć awk, polecam zapoznać się z oficjalną dokumentacją GNU Awk. Teraz na pewno wiesz, jak uczynić swoje dane bardziej uległymi!
GO TO FULL VERSION