Команда wc подсчитает количество строк, слов, байт, или символов в текстовом файле.
Команда wc без опций и аргумента
Будучи запущена без опций и аргумента, команда wc подсчитывает число строк, слов и байт в стандартном вводе (например, с клавиатуры):
$ wc (Enter) когда (Enter) мы были (Enter) молоды (Enter + Ctrl-d) 3 4 38
На выходе команды мы видим три числа: количество строк (3), количество слов (4) и количество байт (38).
Говорят, что раньше (до повсеместного распространения Юникода, где символ может быть представлен двумя байтами), команда wc по умолчанию сообщала число строк, слов и символов соответственно. Некоторые руководства сохраняют эту ошибку по сей день. Имея дело с английским текстом, нетрудно ошибиться, так как английские буквы представлены даже в Юникоде одним байтом, и их количество совпадет с количеством байт, что не гарантировано для прочих символов в тексте.
Тут необходимо прояснить, что «словом» команда wc считает непрерывную последовательность символов, отделенную от других символов одним или более пробелом, знаком табуляции, и/или символом новой строки (невидимый символ, возникающий при нажатии клавиши Enter). При подсчете количества символов учитываются все вышеперечисленные категории.
Linux для Начинающих — Команды: find, cut, sort, wc
Строкой считается последовательность «слов», заканчивающаяся символом новой строки.
Работа с файлами
Команда 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 для подсчета количества файлов в директориях:
v20.9 Утилита WC — Сколько строк, слов или символов в файле?
~/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
Это займет несколько минут в зависимости от производительности вашей системы.
Источник: rus-linux.net
Записки Линуксоида
Программа wc выдаёт информацию о текстовом файле: количество строк, слов и символов.
wc [параметры]. [файл].
- –l — показать количество строк.
- –w — показать количество слов.
- –c — показать количество символов. При подсчёте учитываются все символы, в том числе пунктуации и пробелы.
Несмотря на то, что программа wc кажется бесполезной, это не значит, что мы не будем её использовать. Существует много программ, которые изначально были написаны для одних целей, но их используют совсем для другого. Так и wc, сейчас редко применяется по прямому назначению. Например, необходимо посчитать количество файлов в текущей директории. Это можно сделать следующим образом:
$ ls | wc -l 5 $
Программа ls видит, что результаты её работы передаются по конвейеру команд, поэтому файлы выдаются по одному на строку. Посчитав количество строк, мы узнаем количество файлов.
Тоже самое можно сделать и с пользователями, работающими в системе. Who показывает, кто сейчас работает в системе — один пользователь одна строка. Посчитав количество строк, получаем количество пользователей.
Источник: www.kryukov.biz
Русские Блоги
Основные функции командной программы WC используют Python
Здесь основной код Python используется для реализации основных функций командной программы WC в рамках системы Linux.
#!/usr/bin/env python #encoding: utf-8 # Author: liwei # Function: wc program by python from optparse import OptionParser import sys,os def opt(): parser = OptionParser() parser.add_option(‘-c’, ‘—char’, dest=’chars’, action=’store_true’, default=False, help=’only count chars’) parser.add_option(‘-w’, ‘—word’, dest=’words’, action=’store_true’, default=False, help=’only count words’) parser.add_option(‘-l’, ‘—line’, dest=’lines’, action=’store_true’, default=False, help=’only count lines’) parser.add_option(‘-n’, ‘—nototal’, dest=’nototal’, action=’store_true’, default=False, help=’don’t print total information’) options, args = parser.parse_args() return options, args #print options def get_count(data): chars = len(data) words = len(data.split()) lines = data.count(‘n’) return lines, words, chars #if not options.chars and not options.words and not options def print_wc(options, lines, words, chars, fn): if options.lines: print lines, if options.words: print words, if options.chars: print chars, print fn def main(): options, args = opt() if not (options.lines or options.words or options.chars): options.lines, options.words, options.chars = True, True, True if args: total_lines, total_words, total_chars = 0, 0, 0 for fn in args: if os.path.isfile(fn): with open(fn) as fd: data = fd.read() lines, words, chars = get_count(data) print_wc(options, lines, words, chars, fn) total_lines += lines total_words += words total_chars += chars elif os.path.isdir(fn): print >> sys.stderr, ‘%s is a directory’ %fn else: sys.stderr.write(‘%s: No such file or directoryn’ % fn) # Только несколько файлов рассчитают общее поле if len(args) > 1 and not options.nototal: print_wc(options, total_lines, total_words, total_chars, ‘total’) else: fn = » data = sys.stdin.read() lines, words, chars = get_count(data) print_wc(options, lines, words, chars, fn) if __name__ == ‘__main__’: main()
Источник: russianblogs.com