Polecenie wc: liczenie wierszy i słów oraz wc -l z potokami

Środowisko testoweRodzina RHELAlmaLinux 9.8konto rootSprawdzono 2026-10-29

Polecenie wc to polecenie systemu Linux, które liczy i wypisuje liczbę wierszy, słów i bajtów w pliku. Gdy policzysz poleceniem wc -l wiersze przykładowego pliku z logiem dostępu serwera WWW, otrzymasz 10, a gdy grep odfiltruje tylko odpowiedzi 404 i przekażesz je do wc -l, zobaczysz liczbę nieudanych żądań, 3, jako jedną liczbę.

Logi, zawartość plików i katalog roboczy /root/work poniżej to przykładowe wartości. Log to dziesięciowierszowy plik utworzony z adresami IP zarezerwowanymi do dokumentacji, a pozostałe pliki również utworzono wyłącznie do testów.

1️⃣ Podstawy polecenia wc i odczytywanie wyniku

Podstawowa postać polecenia to wc, potem opcje, potem pliki. Jeśli podasz tylko plik bez opcji, wc wypisze kolejno liczbę wierszy, słów i bajtów, a na końcu doda nazwę pliku.

cd /root/work
wc access.log
 10 100 766 access.log

W wyniku liczenia logu dostępu 10 to liczba wierszy, 100 liczba słów, a 766 liczba bajtów.

Aby zobaczyć tylko jedną liczbę, dodaj jedną z opcji -l, -w lub -c.

wc -l access.log
10 access.log
wc -w access.log
100 access.log
wc -c access.log
766 access.log

Jeśli podasz plik, który nie istnieje, pojawi się komunikat o błędzie, a kod wyjścia wyniesie 1.

wc nosuch.txt
wc: nosuch.txt: No such file or directory
echo $?
1

2️⃣ Liczenie wierszy za pomocą wc -l i potoki

Gdy razem z liczbą wierszy wypisywana jest nazwa pliku, przy zapisywaniu liczby do zmiennej w skrypcie trzeba jeszcze raz odciąć nazwę. Jeśli przekażesz plik przekierowaniem (<) lub potokiem, wc nie zna nazwy pliku i wypisuje tylko liczbę.

wc -l < access.log
10
cat access.log | wc -l
10

Gdy postawisz grep przed potokiem, policzysz tylko wiersze spełniające warunek. Wyszukiwanie obejmowało spacje przed kodem odpowiedzi 404 i po nim, a 404 zawierały trzy wiersze.

grep ' 404 ' access.log | wc -l
3

Aby policzyć, ile adresów IP się połączyło, wytnij tylko pierwsze pole, usuń powtarzające się wiersze za pomocą sort -u i dopiero wtedy policz. W dziesięciowierszowym logu były cztery różne adresy IP.

cut -d ' ' -f 1 access.log | sort -u
192.0.2.10
192.0.2.44
198.51.100.7
203.0.113.25
cut -d ' ' -f 1 access.log | sort -u | wc -l
4

wc -l liczy znaki nowego wiersza. Dlatego dla pliku bez znaku nowego wiersza na końcu ostatniego wiersza wc -l wypisuje 1, choć cat pokazuje dwa wiersze.

cat no-newline.txt
first line
last line
wc -l no-newline.txt
1 no-newline.txt

Jeśli liczba wierszy wychodzi o jeden za mała, najpierw sprawdź, czy ostatni wiersz kończy się znakiem nowego wiersza.

3️⃣ Opcje wc i liczba znaków z -c i -m

W UTF-8 litery angielskie i cyfry zajmują 1 bajt na znak, a znaki koreańskie (hangul) i ☕ po 3 bajty. Dlatego w pliku z samym tekstem angielskim liczba bajtów policzona przez -c i liczba znaków policzona przez -m są równe, ale gdy pojawia się koreański, obie liczby się różnią. Do porównania służy plik z dwoma wierszami koreańskich nazw z menu i jednym wierszem po angielsku.

cat menu.txt
아메리카노
카페 라테 ☕
tea
wc -c menu.txt
38 menu.txt
wc -m menu.txt
18 menu.txt

-c dało 38, a -m 18, czyli różnicę 20. To dodatkowe 2 bajty zajmowane przez każdy z dziewięciu znaków koreańskich i ☕, więc w pliku z koreańskim trzeba liczyć przez -m, aby zgadzało się z rzeczywistą liczbą znaków. Pomiar wykonano w ustawieniach regionalnych C.UTF-8, a według podręcznika -m liczy w jednostkach znaków danych ustawień regionalnych.

-L wypisuje szerokość wyświetlania najdłuższego wiersza. W logu dostępu najdłuższy wiersz miał 82 kolumny; w pliku menu każdy znak koreański i ☕ zajmuje dwie kolumny, więc wiersz z 7 znaków dał 12.

wc -L access.log
82 access.log
wc -L menu.txt
12 menu.txt

Litery łacińskie ze znakami diakrytycznymi zajmują w UTF-8 2 bajty na znak. Zmierzono to osobno na pliku zawierającym tylko wiersz café.

cat cafe.txt
café
wc -c cafe.txt
6 cafe.txt
wc -m cafe.txt
5 cafe.txt

-c dało 6, a -m 5, bo jedno é zajęło o jeden bajt więcej. Litery angielskie i cyfry zajmują 1 bajt, litery z akcentem, takie jak é, 2 bajty, a znaki koreańskie i ☕ 3 bajty, więc liczba bajtów różni się nawet przy tej samej liczbie znaków.

Tabela zestawia polecenie pasujące do każdego zadania z liczbą policzoną w tym artykule.

ZadaniePoleceniePomiar w tym artykule
Pobranie samej liczby wierszywc -l < access.log10Sama liczba, bez nazwy pliku
Liczenie wierszy spełniających warunekgrep ‘ 404 ‘ access.log | wc -l3Wiersze z odpowiedzią 404
Liczenie różnych wartościcut -d ‘ ‘ -f 1 access.log | sort -u | wc -l4Liczba różnych adresów IP
Sprawdzenie rozmiaru plikuwc -c access.log766Liczba bajtów
Liczba znaków pliku z tekstem koreańskimwc -m menu.txt1838, gdy ten sam plik liczy się przez -c
Szerokość wyświetlania najdłuższego wierszawc -L access.log8212 dla pliku menu, w którym każdy znak koreański liczy się jako dwie kolumny
Suma wierszy wielu plikówwc -l *.log13Suma w wierszu total

4️⃣ Suma dla wielu plików z wc w Linuksie

Jeśli podasz kilka plików, wc wypisze po jednym wierszu dla każdego pliku, a w ostatnim wierszu doda sumę jako total. Gdy policzysz razem log dostępu i log błędów, 13 w wierszu total to suma wierszy obu plików.

wc access.log error.log
 10 100 766 access.log
  3  11  76 error.log
 13 111 842 total

Aby za jednym razem policzyć logi z tym samym rozszerzeniem, użyj symbolu wieloznacznego. Powłoka zamienia *.log na nazwy plików i dopiero je przekazuje, więc wynik jest taki sam jak przy wpisaniu każdej nazwy pliku osobno.

wc -l *.log
 10 access.log
  3 error.log
 13 total

Pliki o różnych rozszerzeniach też policzysz za jednym razem, jeśli wpiszesz ich nazwy jedna po drugiej. Dwa logi i plik menu policzone razem dały total 16.

wc -l access.log error.log menu.txt
 10 access.log
  3 error.log
  3 menu.txt
 16 total

🔲 Symulator polecenia wc

W symulatorze poniżej możesz samodzielnie wpisać wc na przykładowych plikach z artykułu. Za pomocą przycisków wypróbujesz -l, -m i liczenie przez potok, a gdy dodasz wiersz do access.log i policzysz jeszcze raz, pojawi się większa liczba.

Symulator polecenia wcwc / konto root
[root@server work]#
Klawiszami ↑↓ przywołasz wcześniej wpisane polecenia.

🔢 FAQ & polecane treści

Tak, gdy liczysz wiersze spełniające warunek w jednym pliku. W tym samym logu dostępu grep -c z tym samym warunkiem także dało 3. grep -c załatwia sprawę jednym poleceniem bez potoku, a wc -l służy do liczenia wyniku innych poleceń poza grep, takich jak sort czy cut.

Jako jedno słowo liczy każdy fragment oddzielony spacjami, tabulatorami lub znakami nowego wiersza. Wynik [echo ‘log_level=warn timeout = 30’ | wc -w] to 4. log_level=warn bez spacji liczy się jako jedno słowo, a = ze spacjami po obu stronach jako osobne słowo.

Wybierz same pliki poleceniem find i przekaż je do wc -l. W przykładowym katalogu [find /root/work -type f | wc -l] wypisało 5. [ls | wc -l] w tym samym katalogu też dało 5, ale ls wypisuje jako wiersze także nazwy podkatalogów i nie liczy plików w ich wnętrzu.

ℹ️ Informacja o linkach partnerskich
Treści tej witryny zawierają linki partnerskie. Jeśli odwiedzający kupi produkt lub usługę przez taki link, witryna otrzymuje od sprzedawcy prowizję. Kwota płacona przy tym przez kupującego (podczas promocji spada↓) nie wzrasta. Podane ceny, rabaty i dostępność odnoszą się do chwili pisania i mogą różnić się od stanu faktycznego, dlatego przed zakupem sprawdź je u sprzedawcy. Produkty wybieramy i oceniamy według własnych kryteriów, a prowizja nie wpływa ani na kolejność prezentacji, ani na treść ocen.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Prove your humanity: 7   +   1   =