Przetwarzanie tekstu

Jak awk może pomóc w pracy SEO-wca?

Daniel Wlaźlak
Ilustracja do artykułu
(Ilustracja do artykułu : envato, autor Pressmaster)

awk to potężny język programowania do przetwarzania tekstu, który może okazać się niezwykle przydatny dla SEO-wców pracujących z dużymi zbiorami danych.

Choć obecnie język ten jest znany głównie w środowiskach administracyjnych, jego zdolność do szybkiej analizy i manipulacji danych sprawia, że może stać się kluczowym elementem codziennej pracy specjalistów od SEO. Zacznijmy od tego czym jest awk i dlaczego warto się nim zainteresować. Jeśli nie uda mi się przekonać Cię moim tekstem do korzystania z tego języka, to nie polegaj tylko na moich słowach – poświęć chwilę, aby dowiedzieć się o nim więcej.

awk naprawdę ułatwia pracę na dużych zbiorach danych! 

Czym jest awk i jak działa?

awk to język skryptowy używany do przetwarzania i analizy danych tekstowych, który pozwala na przeszukiwanie, filtrowanie, formatowanie i manipulowanie danymi tekstowymi na podstawie określonych wzorców. Dzięki prostocie składni i potężnym możliwościom, awk może być używane do różnych zadań związanych z analizą plików tekstowych, takich jak logi serwera, raporty z narzędzi analitycznych (Screaming Frog), listy słów kluczowych (z ahrefs lub SENUTO) i wiele innych.

awk przetwarza linia po linii

Jedną z największych zalet awk jest jego zdolność do efektywnego radzenia sobie z bardzo dużymi zbiorami danych. awk przetwarza pliki tekstowe w sposób sekwencyjny, czyli linia po linii. Oznacza to, że wczytuje do pamięci tylko bieżącą linię danych, wykonuje na niej określone operacje, a następnie przechodzi do kolejnej linii.

Analiza logów serwera, jako zachęta do korzystania z awk

Każdy wie, jak ciężko przegląda się accesslogi, a niestety jednym z częstych zadań SEO-wca pracującego przy dużych stronach jest analiza logów serwera, która pozwala zrozumieć, jak roboty wyszukiwarek indeksują witrynę, znaleźć szybko przyczynę awarii SEO (spadki spowodowane problemami technicznymi) lub przetestować na szybko kolejne z wdrożeń. 

awk umożliwia szybkie filtrowanie i analizowanie dużych plików logów serwera w celu identyfikacji problemów z indeksowaniem, błędów 4/5xx czy wzorców ruchu. Dzięki awk można w prosty sposób wyciągnąć z logów istotne informacje, takie jak liczba wejść z określonych botów, identyfikacja stron zwracających dany status lub wykrywanie nietypowych wzorców ruchu.

Na początek, przyjrzyjmy się, jak za pomocą awk można wyciągnąć wszystkie unikalne adresy URL, które zwracają błąd 404 z logów Nginx. Przykład ten jest użyteczny do identyfikacji brakujących lub usuniętych stron, które mogą wymagać naprawy lub przekierowania.

Przyjmijmy, że logi serwera nginx mają następujący format (domyślny `combined log format`), u Ciebie mogą się one nieznacznie różnić:

 127.0.0.1 - - [12/Sep/2024:16:45:12 +0000] "GET /missing-page.html HTTP/1.1" 404 169 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" 

Format ten składa się z następujących pól:

  • $1 – Adres IP klienta
  • $4 – Data i czas żądania
  • $6 – Metoda HTTP oraz ścieżka żądania (URL)
  • $9 – Kod odpowiedzi HTTP (np. 404)

Komórki oznaczone $x to kolejne pola - akurat w tym przypadku - rozdzielone znakiem tabulacji. W awk liczymy od 1 nie jak to ma miejsce w programowaniu od 0.  {print $0}: Drukuje całą linię. 

Za pomocą poniższego polecenia awk, możemy wyciągnąć, z tego formatu logów, wszystkie unikalne adresy URL, które zwracają błąd 404. Polecenie to tego powinno mieć postać: 

 awk '$9 == 404 {print $7}' access.log | sort | uniq 

Poniżej znajduje się opis działania każdego elementu tego polecenia:

  • awk '$9 == 404 {print $7}' access.log:awk przeszukuje plik `access.log`, dzieli standardowo każdą linię na pola wg tabulatora i sprawdza, czy wartość w dziewiątym polu (kod odpowiedzi HTTP) wynosi 404. Jeśli tak, polecenie wypisuje siódme pole, które zawiera adres URL (ścieżkę żądania).
  • sort: Wynik działania AWK jest sortowany alfabetycznie, aby ułatwić późniejsze usuwanie duplikatów.
  • uniq: Komenda `uniq` usuwa duplikaty z posortowanej listy, pozostawiając tylko unikalne adresy URL.sort i uniq - to dwie komendy unixowe, do których kolejno przesyłamy za pomocą potoku "|" dane.

Po wykonaniu powyższego polecenia możemy uzyskać wynik w postaci listy unikalnych adresów URL, które zwracają błąd 404, na przykład:

 /missing-page.html /deleted-page.html /old-section/page.html 

Taki wynik pozwala SEO-wcom na szybką identyfikację brakujących stron i podjęcie odpowiednich działań, takich jak przekierowania lub naprawa uszkodzonych linków. Korzystając z dobrodziejstw potoków w terminalach, wynik stron zwracających w logach status 404 możemy przesłać do pliku, a nie wyświetlać w standardowym wyjściu. awk '$9 == 404 {print $7}' access.log | sort | uniq >> 404.txt

Analogicznie wyciągniesz  błędy 500 za pomocą komendy awk '$9 == 500 {print $7}' access.log | sort | uniq  lub wszystkie strony, które zwracają status 200 i mają w adresie nazwę /tag/  awk '$9 == 200 && $7 ~ /\/tag\// {print $7}' access.log | sort | uniqTa komenda działa w następujący sposób:

  • awk '$9 == 200 && $7 ~ /\/tag\// {print $7}' access.log - używa awk, aby sprawdzić dwa warunki:
    • $9 == 200 - filtruje wiersze, gdzie kolumna 9 (status HTTP) wynosi 200.
    • $7 ~ /\/tag\// - filtruje wiersze, gdzie kolumna 7 (adres URL) zawiera ciąg /tag/.
  • sort | uniq - sortuje wyniki i usuwa duplikaty, aby zwrócić unikalne strony spełniające warunki.

Wykorzystując proste tagi warunkowe, używając prostych wyrażeń regularnych, możesz z logów wyciągnąć wiele informacji.  Dla potrzeby przykładów skupiam się tutaj na logach nginx, ale analogicznie możesz analizować każde uporządkowane dane, np. raport crawlu ze Screaming Froga czy eksport słów kluczowych z SENUTO.

Podstawowa składnia awk

Zagmatwane? Znasz już możliwości, przejdźmy do podstawowej składni. 

awk 'warunek {akcja}' plik
  • warunek: Warunek (np. wyrażenie logiczne), który określa, na których liniach awk powinien wykonywać akcję.
  • akcja: Działanie, które ma być wykonane na liniach spełniających warunek.
  • plik: Plik wejściowy, który będzie przetwarzany.

Przykłady użycia awk

1. Drukowanie wszystkich linii pliku:

awk '{print $0}' plik.txt

{print $0}: Drukuje całą linię. $0 reprezentuje całą linię tekstu.

2. Drukowanie konkretnej kolumny:

awk '{print $1}' plik.txt

$1 reprezentuje pierwszą kolumnę (pole) linii. Można użyć $2, $3, itd., aby uzyskać dostęp do kolejnych kolumn.

3. Filtracja na podstawie warunku:

awk '$3 > 100 {print $1, $3}' plik.txt

$3 > 100: Sprawdza, czy wartość w trzeciej kolumnie jest większa niż 100. {print $1, $3}: Jeśli warunek jest spełniony, drukuje pierwszą i trzecią kolumnę.

4. Użycie wzorca do dopasowania:

awk '/error/ {print $0}' plik.txt

'/error/': Szuka linii zawierających słowo "error". {print $0}: Drukuje całe linie, które zawierają ten wzorzec.

5. Sumowanie wartości z kolumny:

awk '{suma += $2} END {print suma}' plik.txt

{suma += $2}: Dla każdej linii dodaje wartość z drugiej kolumny do zmiennej suma. END {print suma}: Po przetworzeniu wszystkich linii, drukuje wartość suma.

6. Zmiana separatora pól:

awk -F',' '{print $1, $2}' plik.csv

W awk domyślnym znakiem rozdzielającym pola jest spacja lub tabulacja. Można jednak zmienić znak rozdzielający, korzystając z wewnętrznej zmiennej FS (Field Separator) lub używając opcji -F podczas wywoływania awk.  

-F',': Ustawia separator pól na przecinek (użyteczne dla plików CSV). {print $1, $2}: Drukuje pierwszą i drugą kolumnę.

Zmianę FS możemy zrobić też w składni:

awk 'BEGIN {FS=";"} {print $1}' plik.txt

Gdzie w tym drugim przykładzie dzielimy pola po  ";". 

Monitorowanie logów Nginx w czasie rzeczywistym za pomocą awk i tail -f

Jeśli zrobiłeś wdrożenie i masz dostęp do logów nginx, możesz przeglądać określone wzorce w czasie rzeczywistym i wyciągać unikalne adresy URL zwracające np.  błąd 404. Wystarczy połączyć komendę awk z tail -f. Komenda tail -f umożliwia śledzenie nowo dodawanych linii do pliku logów w miarę ich powstawania, a awk filtruje dane zgodnie z ustalonymi kryteriami. Aby dynamicznie monitorować logi i jednocześnie wyświetlać unikalne adresy URL z błędem 404, można użyć następującego polecenia:

 tail -f access.log | awk '$9 == 404 {print $7}' Opis działania komendy
  • tail -f access.log: Śledzi plik access.log w czasie rzeczywistym i wypisuje nowe linie, które są dodawane do pliku. Dzięki tej komendzie możesz obserwować wszystkie nowe wpisy logów, które pojawiają się w miarę ich zapisywania przez serwer Nginx.
  • awk '$9 == 404 {print $7}': Przefiltrowuje logi wypisywane przez tail -f w czasie rzeczywistym, sprawdzając, czy wartość w dziewiątym polu (kod odpowiedzi HTTP) wynosi 404. Jeśli tak, wypisuje siódme pole (adres URL żądania), które powoduje błąd 404.

Pomimo pozornie prostej składni, jedynym ograniczeniem w wykorzystaniu awk do analizowania i przetwarzania uporządkowanego tekstu jest nasza wyobraźnia. awk oferuje wiele możliwości, od podstawowego filtrowania danych po złożone operacje tekstowe, takie jak sortowanie, agregowanie, czy transformacja danych w locie.

Nie powinniśmy ograniczać się tylko do analizowania logów za pomocą awk, możemy tworzyć niestandardowe raporty, przekształcać dane na wiele różnych formatów, czy nawet budować złożone procesy przetwarzania danych, które mogą być automatyzowane w ramach skryptów.

Ja dzięki awk z łatwością analizuję ogromne zbiory danych, ponieważ to narzędzie pozwala na szybkie i efektywne oczyszczanie oraz filtrowanie informacji. Umożliwia ono wyodrębnienie tylko tych danych, które są naprawdę potrzebne, eliminując zbędne rekordy i porządkując surowe dane w czytelny sposób. Korzystając z prostych skryptów i wyrażeń regularnych, można automatycznie usuwać niechciane znaki, dzielić tekst na kolumny, a nawet wykonywać skomplikowane operacje, takie jak grupowanie i agregowanie danych.

Jeśli poznasz awk, to dzięki swojej wszechstronności, staje się niezastąpionym narzędziem w pracy z dużymi plikami tekstowymi, logami czy raportami, umożliwiając szybkie wydobycie istotnych informacji bez konieczności stosowania arkuszy kalkulacyjnych, skomplikowanych programów czy manualnej edycji. 

 

 


Czy ten artykuł był Ci pomocny? Jesteśmy doświadczoną agencją SEO, skontakuj się z nami, jeśli potrzebujesz pomocy ze swoją stroną.

Prowadziłem i rozwijałem działy SEO w bardzo dużych wydawnictwach. Specjalizuję się w tworzeniu kompleksowych rozwiązań zasięgowych.

Spotkajmy się też w moich social media :
Zobacz moje wszystkie artykuły
Zaufali nam:
ElbudBis
Instytu cyfrowego obywatelstwa
Kinesso
Fundacja Orange
Rodzice.pl

Współpracuj z nami!

Naszą mocą jest technologia i doświadczony zespół

Przez lata zdobywaliśmy doświadczenie u największych wydawców w Polsce, a teraz zadbamy o rozwój Twojej firmy od strategii wzrostu po wdrożenia na stronach dzięki naszemu własnemu software house'owi. Zaufaj nam, aby osiągać dobre wyniki.

Porozmawiajmy o Twoich celach i potrzebach!

Przejrzyj najnowsze artykuły i wpisy na naszym blogu