Библиотека сайта rus-linux.net
Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist
HuMan: wc
Автор: Алексей ДмитриевДата: 29 января 2009
Команда 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 Password: #
Затем набрать следующее заклинание:
# ls -R / | wc -l 295092
Это займет несколько минут в зависимости от производительности вашей системы.