Linux · grep, sort, uniq, wc

grep, sort, uniq i wc — praktyczna karta pracy z Linuksa

grep, wc, cut, sort i uniq na dzienniku logowań. Trzy zadania, klucz z wynikami i skrypt rozwiązania.

45 minutPoziom podstawowyPliki i rozwiązania

Materiał redakcyjny TablicaPro · liceum i technikum

$ grep -c ERROR dziennik.log
3
$ wc -l < dziennik.log
10
3 błędy w 10 liniach.
Filtrowanie bez otwierania pliku.

Administrator rzadko czyta logi linijka po linijce — filtruje je, sortuje i zlicza. Cztery proste polecenia: grep, sort, uniq i wc wystarczą, by odpowiedzieć na pytania „ile było błędów?” i „kto logował się najczęściej?”. Na lekcji uczniowie analizują dziennik logowań z fikcyjnymi użytkownikami.

Scenariusz jest przeznaczony na 45 minut dla klasy znającej podstawowe polecenia Linuksa — na przykład po lekcji o poleceniach.

Przygotowanie stanowisk

Potrzebny jest terminal z powłoką bash (Ubuntu, WSL lub maszyna wirtualna). Ćwiczenia wykonuj na zwykłym koncie, bez sudo. Rozpakuj pakiet z sekcji materiałów do folderu lekcja i przejdź do niego poleceniem cd. Plik dziennik.log leży w tym folderze. Skrypt rozwiazanie.sh odtwarza całą lekcję w katalogu tymczasowym i nie zmienia Twoich plików.

Cele i plan lekcji

Po zajęciach uczeń potrafi:

  • filtrować linie poleceniem grep (także z opcjami -c, -v, -i);
  • policzyć linie poleceniem wc -l;
  • wyciąć kolumnę poleceniem cut -d" " -f3;
  • zliczyć powtórzenia kombinacją sort | uniq -c | sort -rn.
CzasPraca na lekcji
0–5 minProblem: ile błędów jest w logu?
5–15 mingrep, wc, opcje
15–22 mincut, sort, uniq -c
22–37 minTrzy zadania samodzielne
37–42 minPorównanie z kluczem
42–45 minPytania kontrolne

Plik dziennik.log

Plik ma dziesięć linii w formacie data godzina użytkownik zdarzenie [szczegół]:

2026-10-12 08:01 anna LOGIN
2026-10-12 08:05 bartek LOGIN
2026-10-12 08:07 anna ERROR haslo
2026-10-12 08:15 celina LOGIN
2026-10-12 08:20 bartek ERROR haslo
2026-10-12 08:21 bartek LOGIN
2026-10-12 08:30 anna LOGOUT
2026-10-12 08:42 damian ERROR siec
2026-10-12 08:50 celina LOGOUT
2026-10-12 09:02 bartek LOGOUT

Cztery polecenia

  • grep wzorzec plik wypisuje linie zawierające wzorzec; -c podaje liczbę takich linii, -v odwraca wybór, -i ignoruje wielkość liter.
  • wc -l liczy linie (z pliku albo ze standardowego wejścia).
  • cut -d' ' -f3 wycina trzecie pole, gdy separatorem jest spacja.
  • sort porządkuje linie, sort -u usuwa duplikaty, a sort -rn sortuje liczbowo malejąco.
  • uniq -c zlicza sąsiadujące powtórzenia — dlatego przed nim zawsze stosuje się sort.

Polecenia łączymy potokiem |, który przekazuje wynik jednego polecenia na wejście następnego.

Zadania

Zadanie 1. Błędy. Policz linie w pliku, wypisz linie zawierające ERROR i podaj ich liczbę (grep -c).

Zadanie 2. Zdarzenia. Policz zdarzenia LOGIN, linie niebędące logowaniem (grep -v) oraz wszystkie zdarzenia użytkownika bartek (grep -i).

Zadanie 3. Użytkownicy. Wytnij kolumnę z nazwą użytkownika, zlicz wystąpienia każdego użytkownika i posortuj od najaktywniejszego. Policz, ilu różnych użytkowników jest w logu.

Dla chętnych: wypisz linie z błędem hasła z godziny 08:00–08:30 (grep "08:[0-2]" | grep haslo).

Rozwiązanie i wyniki

set -e
ZRODLO="$(cd "$(dirname "$0")" && pwd)"
TMP=$(mktemp -d)
cp "$ZRODLO/dziennik.log" "$TMP/"
cd "$TMP"

echo "--- Zadanie 1"
wc -l < dziennik.log
grep ERROR dziennik.log
grep -c ERROR dziennik.log

echo "--- Zadanie 2"
grep -c LOGIN dziennik.log
grep -v LOGIN dziennik.log | wc -l
grep -i "BARTEK" dziennik.log | wc -l

echo "--- Zadanie 3"
cut -d' ' -f3 dziennik.log | sort | uniq -c | sort -rn
cut -d' ' -f3 dziennik.log | sort -u | wc -l

cd /
rm -r "$TMP"

Skrypt rozwiazanie.sh z pakietu wykonuje te polecenia w katalogu tymczasowym i wypisuje:

--- Zadanie 1
10
2026-10-12 08:07 anna ERROR haslo
2026-10-12 08:20 bartek ERROR haslo
2026-10-12 08:42 damian ERROR siec
3
--- Zadanie 2
4
6
4
--- Zadanie 3
      4 bartek
      3 anna
      2 celina
      1 damian
4

Typowe błędy

ObjawCo sprawdzić
grep nic nie wypisujeWzorzec różni się wielkością liter; użyj -i albo popraw zapis.
uniq -c nie łączy powtórzeńBrakuje sort przed uniq — łączy tylko sąsiednie linie.
sort -n daje złą kolejność liczbBez -n liczby sortowane są jak tekst (10 przed 2).
wc -l plik wypisuje też nazwę plikuTo zamierzone; wc -l < plik pokazuje samą liczbę.
cut zwraca całą linięZły separator: -d' ' oznacza spację, nie tabulator.
Różne wyniki na innych komputerachDla polskich znaków ustaw kodowanie UTF-8 i porównuj te same pliki.

Pytania kontrolne i punktacja

  1. Czym różni się grep ERROR plik od grep -c ERROR plik?
  2. Dlaczego przed uniq -c stosujemy sort?
  3. Co robi potok |?

Odpowiedzi: Pierwsze wypisuje linie z ERROR, drugie tylko ich liczbę. uniq łączy tylko sąsiadujące, identyczne linie. Przekazuje wynik jednego polecenia na wejście następnego.

Proponowana punktacja (razem 10 punktów): zadanie 1 — wc -l 1 pkt, grep 1 pkt, grep -c 1 pkt; zadanie 2 — trzy polecenia po 1 pkt; zadanie 3 — cut 1 pkt, potok sort | uniq -c | sort -rn 2 pkt, liczba użytkowników 1 pkt. Zadanie dla chętnych nie jest wymagane do pełnej oceny.

Materiały do pobrania

Rozpakuj ZIP przed otwarciem plików. Materiały są dostępne bez logowania; publiczne rozwiązanie służy nauce i samodzielnemu sprawdzeniu, a nie poufnemu sprawdzianowi.

Co dalej?

Następny krok to przekierowania, find i skrypty automatyzujące analizę logów. Ten materiał rozwija dział o przetwarzaniu tekstu w kursie Linux w TablicaPro, gdzie znajdziesz prezentacje, ćwiczenia i testy do prowadzenia lekcji.

Źródła techniczne: podręcznik GNU grep oraz podręcznik GNU coreutils. Zobacz też lekcję o poleceniach Linux.

Poprowadź kolejne lekcje Linux

Pełny kurs: prezentacje, ćwiczenia i testy do pracy z klasą.

Kup dostęp do kursu Linux →

Zobacz program kursu