Wc

Материал из Ай да Linux Wiki
Перейти к навигации Перейти к поиску

Команда wc подсчитает количество строк, слов, байт, или символов в текстовом файле.


Команда wc без опций и аргумента

Будучи запущена без опций и аргумента, команда wc подсчитывает число строк, слов и байт в стандартном вводе (например, с клавиатуры):

 wc         (Enter)
 когда        (Enter)
 мы были      (Enter)
 молоды       (Enter + Ctrl-d)
      3       4      38

На выходе команды мы видим три числа: количество строк (3), количество слов (4) и количество байт (38).

Говорят, что раньше (до повсеместного распространения Юникода, где символ может быть представлен двумя байтами), команда wc по умолчанию сообщала число строк, слов и символов соответственно. Некоторые руководства сохраняют эту ошибку по сей день. Имея дело с английским текстом, нетрудно ошибиться, так как английские буквы представлены даже в Юникоде одним байтом, и их количество совпадет с количеством байт, что не гарантировано для прочих символов в тексте.

Тут необходимо прояснить, что "словом" команда wc считает непрерывную последовательность символов, отделенную от других символов одним или более пробелом, знаком табуляции, и/или символом новой строки (невидимый символ, возникающий при нажатии клавиши Enter). При подсчете количества символов учитываются все вышеперечисленные категории.

Строкой считается последовательность "слов", заканчивающаяся символом новой строки.

Работа с файлами

Команда wc принимает файл в качестве аргумента:

 wc onegin.txt
 14  61  668 onegin.txt

Это 14 строк первой строфы "Евгения Онегина".

Команда wc принимает в качестве аргумента любое количество файлов. Эти файлы указываются через пробел, при необходимости со всеми своими путями (path):

 wc /etc/fstab /boot/grub/menu.lst /home/ya/Desktop/wc-ru.txt
 11   66  918 /etc/fstab
 34  102  776 /boot/grub/menu.lst
 69  185 2445 /home/ya/Desktop/wc-ru.txt
 114 353 4139 итого

Команда укажет параметры каждого из файлов, а в конце суммирует итог.

Можно также задать подсчет параметров всех файлов в директории:

 ~/Desktop$  wc *
 
 wc: Documents: Is a directory
     0       0       0 Documents
     9      14     207 MyComputer.desktop
     3       4      38 mol.txt
    14      61     668 onegin.txt
   114     156    1715 shema.txt
   150     318    5066 trash.desktop
 wc: wc: Is a directory
     0       0       0 wc
    69     185    2445 wc-ru.txt
    15      18     258 Дисковод
     1       0       2 Текстовый файл
   375     756   10399 итого

но это имеет смысл делать только с директориями, содержащими лишь текстовые файлы. Если в директории будут находиться бинарные или .html файлы, то появится множество сообщений типа "Invalid or incomplete multibyte or wide character", что можно перевести как "Поврежденные, либо неполные, либо расширенные символы". А вот самостоятельно выбирать только текстовые файлы команда wc не умеет.

Опции команды wc

У команды немного опций, и все они вполне понятны без долгих объяснений.

Опция -l

Подсчитывает только количество строк:

 wc -l onegin.txt
 14 onegin.txt

Полезным представляется использование этой опции в составе программного канала с командой ls для подсчета количества файлов в директориях:

 ~/Desktop$ ls | wc -l
 10

Это подсчет файлов в текущей директории, а вот подсчет всех файлов рекурсивно (включая подкаталоги и подкаталоги подкаталогов):

 ls -R /home | wc -l
 355

Задание: Подсчитайте, сколько всего файлов в вашей системе. (Ответ в приложении 1)

Опция -L

Подсчитает длину наибольшей строки (правда почему-то не укажет ее номера):

 wc -L onegin.txt
 31 onegin.txt

Опция -m

Подсчитывает только количество символов (включая пробелы, табуляцию, символы новой строки):

 wc -m onegin.txt
 373 onegin.txt

Опция -c

Подсчитывает байты в указанном потоке данных. Я не случайно написал так обще: "потоке данных", потому что эта опция, в отличие от прочих опций команды wc, может применяться к любым данным, а не только к текстовым. Скажем, она может подсчитать число байт в любом двоичном файле, даже графическом:

 wc -c top.jpg
 29559 top.jpg

И даже определить размер раздела жесткого диска:

 wc -c /dev/hdb1
 1003451904 /dev/hdb1

- верно, размер этого раздела около 1Гб. (Это у меня загрузочный раздел, поэтому такой маленький).

Но можно подсчитывать байты не только в файлах, но и в стандартном выводе других программ и процессов. Например:

 dmesg | grep -i 'usb' | wc -c
 2130

Словом, эта опция команды wc дает простор для исследования!

Опции --help и --version общеизвестны и обсуждаться не будут.

Команда wc и символы кириллицы

За время работы по написанию этой статьи, я не заметил никакой разницы в работе с латиницей и с кириллицей.

Резюме программы wc

Простая в освоении и полезная программа. Безусловно найдет применение в качестве программы-фильтра в составе программных каналов (pipes).

Приложения

1. Ответ на задание: Чтобы подсчитать общее число файлов в системе, нужно открыть терминал с правами суперпользователя, так как многие директории запрещены к просмотру рядовым пользователям.

 su

Затем набрать следующее заклинание:

 ls -R / | wc -l
 295092

Это займет несколько минут в зависимости от производительности вашей системы.



Информация взята с open-club.ru