MC, 2012
Ilustracja do artykułu: Linux wc - Zliczanie linijek, słów, znaków występujących we wskazanych plikach

Linux wc - Zliczanie linijek, słów, znaków występujących we wskazanych plikach

Dzisiejszy wpis będzie dotyczył prostego, acz ciekawego narzędzia dostępnego na systemach Linux - polecenia wc. Służy ono do zliczania linijek, słów, znaków, bajtów występujących we wskazanych plikach. Jest to bardzo przydatna komenda podczas tworzenia statystyk, więc warto wiedzieć o jej istnieniu i sposobie działania.

Co robi polecenie wc?

Jak już wspomnieliśmy, polecenie wc zlicza linijki, słowa itp. we wskazanych plikach. Zerknijmy od razu na przykładowe wywołanie tego polecenia:
$ wc plik1.txt
25 82 594 plik1.txt
Jak widzimy, program zwrócił nam pewną informację, a mianowicie, że plik plik1.txt zawiera 25 linijek, 85 słów i zapisano go przy użyciu 594 bajtów.

Jak wydobyć tylko niektóre z tych informacji?

Oczywiście możemy ograniczyć zwracane wartości tylko do tych, które nas interesują. Zajrzyjmy więc do pomocy polecenia wc:
-c, --bytes print the byte counts
-m, --chars print the character counts
-l, --lines print the newline counts
-w, --words wypisanie liczby słów
Zatem wystarczy dołożyć do wywołania odpowiednią flagę, by dostać się tylko do pewnych informacji, których potrzebujemy. Dla przykładu, linijki:
$ wc -l plik1.txt
25 plik1.txt
Słowa:
$ wc -w plik1.txt
82 plik1.txt
Znaki i bajty:
$ wc -m -c plik1.txt
576 594 plik1.txt

Jak zliczać elementy dla wielu plików?

Jeśli interesuje nas najprostszy przypadek stworzenia statystyki wystąpień słów, czy linijek dla wielu plików znajdujących się w tym samym katalogu, wystarczy wydać polecenie:
$ wc -l plik1.txt plik2.txt
25 plik1.txt
31 plik2.txt
56 razem
Bądź prościej:
$ wc -l *.txt
25 plik1.txt
31 plik2.txt
56 razem
Widzimy, że polecenie wc zwróciło zarówno liczbę linijek składających się na każdy plik z osobna, jak i podało sumaryczne dane.

Jak zliczać linijki i słowa rekursywnie?

Nieco bardziej złożony jest przypadek, w którym chcemy policzyć linijki w plikach w sposób rekursywny, czyli również dla plików zawartych w podkatalogach wskazanej lokacji. Samo polecenie wc nie przewiduje takiego rozwiązania, dlatego trzeba posłużyć się również dodatkowym poleceniem, a nawet dwoma. Wykorzystamy polecenie find, które wyselekcjonuje nam odpowiednie pliki (Ubuntu/Debian - Wyszukiwanie plików na Linuksie) a także komendę xargs, o której również już dawniej wspominałem na łamach strony (xargs - Przesyłanie starnardowego wejścia jako parametry do programu).
Wyobraźmy więc sobie, że mamy jakiś projekt aplikacji, np. webowej napisanej w PHP i chcemy policzyć linijki stworzonego przez nas kodu, przy czym pliki .php znajdują się w wielu podkatalogach projektu. W takiej sytuacji, polecenie, które zwróci nam liczbę linijek kodu, może wyglądać podobnie do poniższego:
find < ścieżka do głównego katalogu projektu > -name '*.php' | xargs wc -l
Na przykład:
$ find /var/www/projektPHP -name '*.php' | xargs wc -l
194 /var/www/projektPHP/index.php
...
3321 razem
Tym sposobem możemy policzyć linijki kodu dowolnego programu, czy jakichkolwiek innych plików tekstowych.

Komentarze (6)

Imię:
Treść:
Administrator 2019-06-02 09:41:40
@Beer, należy najpierw odfiltrować takie słowo, czy literę poleceniem grep.
Beer 2019-06-01 11:51:59
Jak policzyć tylko wybrane słowo lub wybraną literę?
Administrator 2019-02-22 10:38:54
@gitara, witaj :)
gitara 2019-02-22 10:09:19
siema :)
Administrator 2019-01-25 16:19:31
@Keer, dziękuję za komentarz.
Keer 2019-01-25 14:17:30
Dobreeeeee