CodeGym /Kursy /Docker SELF /Formatowanie danych za pomocą `awk`

Formatowanie danych za pomocą `awk`

Docker SELF
Poziom 8 , Lekcja 2
Dostępny

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:

  1. cat /var/log/syslog — czyta zawartość pliku.
  2. awk '{print $5}' — wyciąga piątą kolumnę (nazwa procesu).
  3. sort — sortuje wiersze alfabetycznie.
  4. uniq -c — zlicza liczbę unikalnych wierszy.
  5. sort -nr — sortuje wiersze malejąco według wartości liczbowych.
  6. 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!

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION