wc
Подсчёт строк, слов, символов и байт в файлах
Описание
wc (word count) — утилита для подсчёта количества строк, слов, символов и байт в файлах или стандартном вводе. Одна из старейших утилит Unix, присутствует во всех POSIX-совместимых системах. По умолчанию выводит три числа: количество строк, слов и байт.
Понятие «слово» в wc — это последовательность символов, разделённых пробелами, табуляциями или символами новой строки. «Строка» считается по символу перевода строки (\n). Разница между «символами» (-m) и «байтами» (-c) проявляется при работе с многобайтовыми кодировками: один кириллический символ UTF-8 занимает 2 байта, но является 1 символом.
wc часто используется в скриптах для проверки количества результатов поиска, подсчёта строк в выводе команд, оценки размера файлов. При передаче нескольких файлов выводит итоговую строку с суммарными значениями.
Синтаксис
- [OPTION] — флаги выбора счётчиков
- [FILE] — файлы для подсчёта; без файла читает stdin
- При нескольких файлах добавляется строка
totalс суммой - Вывод по умолчанию:
строки слова байты имя_файла
Флаги и опции
| Флаг | Описание | Пример |
|---|---|---|
-l |
Подсчитать количество строк (newlines) | wc -l file.txt |
-w |
Подсчитать количество слов | wc -w document.txt |
-c |
Подсчитать количество байт | wc -c binary.dat |
-m |
Подсчитать количество символов (учитывает мультибайтовые) | wc -m text_utf8.txt |
-L |
Длина самой длинной строки (в символах) | wc -L source.py |
--files0-from=F |
Читать список файлов из файла F (разделитель NUL) | wc --files0-from=list.txt |
Паттерны использования
Подсчёт строк кода
# Строки во всех Python-файлах
wc -l *.py
find . -name "*.py" | xargs wc -l
# Только итог
find . -name "*.py" -exec cat {} + | wc -l
Проверка количества результатов
# Сколько процессов nginx ps aux | grep nginx | wc -l # Сколько ошибок в логе grep -c "ERROR" app.log # то же, что grep | wc -l
Проверка длины строк (линтинг)
# Самая длинная строка в файле wc -L source.py # Найти строки длиннее 79 символов awk 'length > 79' source.py | wc -l
Размер файла в байтах
wc -c image.jpg wc -c < file.txt # только число (без имени) # Сравнение байт и символов (UTF-8) wc -c cyrillic.txt # байты wc -m cyrillic.txt # символы
В условных выражениях скриптов
COUNT=$(grep "error" log.txt | wc -l) if [ "$COUNT" -gt 0 ]; then echo "Found $COUNT errors!" fi
Сводка по всем файлам
# Итоговая статистика по проекту wc -l src/**/*.py src/**/*.js # последняя строка — total
Советы и предупреждения
wc -l < file.txt выведет только цифру, без имени файла.
grep -c "pattern" вместо grep "pattern" | wc -l — это быстрее (меньше процессов).
-c (байты) и -m (символы). Один символ кириллицы — 2 байта в UTF-8.
wc -l считает символы новой строки \n. Если последняя строка файла не заканчивается на \n, она не будет посчитана. Это стандартное поведение POSIX.
wc -l * — shell может превысить лимит аргументов. Используйте find ... | xargs wc -l.