Wc — Ай да Linux Wiki. Wc — Ай да Linux Wiki Резюме программы wc

Анализ файлов - неотъемлемая часть работы с ними. Иногда возникает необходимость подсчитать количество строк или слов в тексте. С этой задачей эффективно справляется команда wc Linux.

Утилита устанавливается по умолчанию практически во всех дистрибутивах GNU/Linux. В этой статье рассмотрим её функции и применение на практике.

Для запуска утилиты откройте терминал и введите:

Терминал будет ожидать ввода данных. После нажатия комбинации клавиш Ctrl + D командный интерпретатор завершит работу программы и выведет три числа, обозначающих количество строк, слов и байт введённой информации.

Утилита может обрабатывать файлы. Стандартная инструкция выглядит так:

  • wc - имя утилиты;
  • file - название обрабатываемого файла.

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

Под объектом следует понимать файл или данные, полученные на стандартный поток ввода.

Команда может обработать несколько файлов, если указать их через пробел или выбрать по шаблону.

Применение команды wc

Обработка стандартного потока ввода с завершением через Ctrl + D :

Согласно анализу, было введено 4 строки, содержащих 5 слов, объёмом в 35 байт.

Перенаправление потока вывода на вход wc :

Обработка всех файлов с расширением .sh в текущем каталоге:

В конце выводится итоговая информация, суммирующая значения для каждого столбца.

Выведем только количество символов и строк двух файлов:

Обратите внимание: порядок указания параметров не влияет на итоговый вид информации. Программа всегда выводит данные в виде СТРОК - СЛОВ - БАЙТ (СИМВОЛОВ) [- ФАЙЛ] . Если какой-то параметр будет отсутствовать, его столбец просто проигнорируется, не задевая остальные. Количество символов будет стоять первым, если в команде содержался и вывод байт.

Вывод

Команда wc Linux является эффективным инструментом при анализе файлов в GNU/Linux. Она может обрабатывать как стандартный поток ввода, так и несколько файлов одновременно. Для извлечения конкретных данных используются параметры командной строки.

Похожие записи:



Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

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

Приложения

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

Ls -R / | wc -l 295092

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

Вопрос 1: Но почему я получил 7, не должен ли я получить « 6 », полагая, что он считает символ « конец строки »?

Вопрос 2. Как работает wc -m ?

Вопрос 3: Когда я использую wc -c (для подсчета числа байтов), у меня есть тот же результат, что и wc -m , так в чем смысл двух разных опций ? Они выполняют ту же работу, не так ли? Если нет, какая разница и как работает wc -c ?

У вас должно быть только 6 символов. Попробуйте запустить

Cat -A filename

Чтобы увидеть непечатаемые символы вашего файла. У вас должно быть что-то дополнительное. Если я сделаю файл так же, как ваш, я вижу

Вы положили место? Это сделало бы 7: ikk $ или, может быть, имеет новую строку:

который также является 7

Как ты говоришь

подсчитывает символы и

подсчитывает байты. Если все ваши символы являются частью набора символов ASCII, тогда будет только 1 байт на символ, поэтому вы получите одинаковый счет из обеих команд.

Попробуйте файл с символами не ASCII:

$ echo ك > testfile $ wc -m testfile 2 testfile $ wc -c testfile 3 testfile

Ага! Теперь больше байтов, чем символов.

Разница между wc -c и wc -m заключается в том, что в локали с многобайтовыми символами (например, UTF8) предыдущий подсчитывает байты, а последний подсчитывает символы. Рассмотрим следующий файл:

$ hexdump -C dummy.txt 00000000 78 79 cf 80 0a |xy...|

(для тех, кто не говорит UTF8, это буквы «x», «y» и «π», а затем новая строка). Это пять байтов:

$ wc -c dummy.txt 5 dummy.txt

но всего четыре символа:

$ wc -m dummy.txt 4 dummy.txt

$ locale charmap UTF-8

В моей текущей среде набор символов – UTF-8, то есть символы кодируются с 1 по 4 байта на символ (хотя, поскольку исходное определение UTF-8 допускало кодовые коды символов до 0x7fffffff, большинство инструментов распознавали UTF- 8 байтовых последовательностей длиной до 6 байтов).

В этом наборе символов все символы из Юникода доступны, а кодируется как значение байта 65, а 乕 как 3 байта 228 185 149 и é в качестве двух байтовой последовательности 195 169, например.

$ printf 乕 | wc -mc 1 3 $ printf a | wc -mc 1 1

$ export fr_FR.iso885915@euro $ locale charmap ISO-8859-15

Я изменил мою среду, где набор символов теперь является ISO-8859-15 (другие вещи, такие как язык, символ валюты, формат даты, также были изменены, коллекция этих региональных настроек называется языковой версией ). Мне нужно запустить новый эмулятор терминала в этой среде, чтобы он адаптировал его рендеринг символов к новому языку.

ISO-8859-15 представляет собой однобайтовый набор символов, что означает, что он имеет только 256 символов (на самом деле даже меньше, чем на самом деле). Этот набор символов используется для языков Западной Европы, поскольку он охватывает большинство его языков (и символ евро).

Он имеет символ с байтовым значением 65, как в UTF-8 или ASCII, он также имеет символ é (как обычно используется на французском или испанском языке, например), но с байтом 233, он не имеет символа..

В этой среде wc -c и wc -m всегда будут давать одинаковый результат.

В Ubuntu, как и в большинстве современных Unix-подобных систем, по умолчанию обычно используется UTF-8, поскольку он является единственным поддерживаемым набором символов (и кодированием), который охватывает весь диапазон Unicode.

Существуют и другие многобайтовые кодировки символов, но они не так хорошо поддерживаются на Ubuntu, и вам нужно пройти через обручи, чтобы иметь возможность создавать локаль с ними, и если вы это сделаете, вы обнаружите, что многие вещи не работать должным образом.

Таким образом, на Ubuntu наборы символов либо однобайтные, либо UTF-8.

Теперь еще несколько примечаний:

В UTF-8 не все байтовые последовательности образуют действительные символы. Например, все символы UTF-8, которые не являются ASCII, формируются с байтами, все из которых имеют 8-й бит, но где только первый имеет 7-й бит.

Если у вас есть последовательность байтов с 8-м битом, ни один из которых не имеет 7-го бита, то это не может быть переведено на символ. И это когда у вас возникают проблемы и несоответствия, поскольку программное обеспечение не знает, что с ними делать. Например:

$ printf "\200\200\200" | wc -mc 0 3 $ printf "\200\200\200" | grep -q . || echo no no

wc и grep нашли персонажа, но:

$ x=$"\200\200\200" bash -c "echo "${#x}"" 3

bash находит 3. Когда он не может отобразить последовательность байтов для символа, он учитывает каждый символ байта.

Это может усложниться, поскольку в Unicode есть кодовые обозначения, которые являются недействительными в качестве символов, а некоторые, которые не являются символами , и в зависимости от инструмента, их кодировка UTF-8 может считаться или не считаться символом.

Еще одна вещь, которую следует учитывать, – это различие между персонажем и графемом, и как они визуализируются.

$ printf "e\u301\u20dd\n" é⃝ $ printf "e\u301\u20dd" | wc -mc 3 6

Там у нас есть код 3 символа, так как 6 байтов отображаются как один графем, потому что у нас есть 3 символа вместе (один базовый символ, сочетание острого акцента и комбинирующий окружающий круг).

GNU-реализация wc найденная на Ubuntu, имеет -L переключатель, чтобы указать ширину отображения самой широкой строки на входе:

$ printf "e\u301\u20dd\n" | wc -L 1

Вы также обнаружите, что некоторые символы занимают 2 ячейки в таком расчете ширины, как наш 乕 сверху:

$ echo 乕 | wc -L 2

В заключение: в более диком слове байт, характер и графх не обязательно одинаковы.

Н екоторые практические примеры команды wc в Linux, как подсчитывать количество строк, слов а также символов текстового файла.

Что такое команда wc в Linux?

Команда wc отображает статистическую информацию о файле, такую ​​как количество строк, слов, символов.

Общая информация: wc означает количество слов.

Синтаксис команды wc:

Wc

Команда wc имеет следующие параметры:

  • -l: Распечатывает только количество строк
  • -w: Печатает только количество слов
  • -c: Печатает только количество байтов
  • -M: Распечатывает количество символов (отличное от количества байтов для не текстовых файлов)
  • -L: Распечатывает длину самой длинной строки в файле
  • -files0-from=F: Получить имена файлов из файла F (имена файлов должны быть разделены символом NULL)

5 практических примеров команды wc в Linux

В этом примере мы собираемся использовать файлы alex.txt и andreyex.txt. Вы можете загрузить эти файлы с помощью команды wc указанные в примерах этой статьей.

Подсчет количества символов в тексте онлайн: https://charactercount.org/ru , удобный инструмент подсчета количества символов в тексте, вы всегда будете знать сколько символов в тексте и слов, а так же есть возможность использовать автосохранение при работе с текстом.

Если вы используете команду wc только с именами входных файлов, без каких-либо параметров, она будет показывать вам количество строк, слов и байтов одновременно.

Wc alex.txt 15 45 366 alex.txt

В приведенном выше виде:

  • 15 – количество строк
  • 45 – количество слов
  • 366 – количество байтов

Теперь, когда вы знаете параметры команды wc, давайте посмотрим некоторые примеры команды wc.

1. Подсчитайте количество строк в файле

Если вы просто хотите узнать количество строк в текстовом файле, вы можете использовать команду wc с опцией ‘l’. В основном, она подсчитывает количество строк в файле.

Wc -l alex.txt 20 alex.txt

2. Подсчитайте количество слов в файле

Если вы просто хотите узнать количество слов в текстовом файле, вы можете использовать команду wc с опцией ‘w’. В ней будет отображаться количество слов с пробелами.

Поделитесь с друзьями или сохраните для себя:

Загрузка...