Алексей Дмитриев, 29 января 2009

HuMan: wc

Команда 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

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

Опция -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
Password:
#

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

# ls -R / | wc -l

295092

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

 


счетчик посещений

 

Система Orphus

Hosted by uCoz