Алексей Дмитриев, 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 Это займет несколько минут в зависимости от производительности вашей системы.
|