Formatowanie danych za pomocą awk
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