Подсчитайте количество вхождений символа char в обычный текстовый файл

StackOverflow https://stackoverflow.com/questions/1603566

Вопрос

Есть ли какой-нибудь способ в linux / terminal подсчитать, сколько раз символ f встречается в обычном текстовом файле?

Это было полезно?

Решение

Как насчет этого?

fgrep -o f <file> | wc -l

Примечание. Кроме того, гораздо легче запомнить / продублировать и настроить, это примерно в три раза (извините, редактировать! испортил первый тест) быстрее, чем ответ Вереба.

Другие советы

еще быстрее:

tr -cd f < file | wc -c

Время для этой команды с файлом с 4,9 МБ и 1100000 вхождений искомого символа:

real   0m0.089s
user   0m0.057s
sys    0m0.027s

Время для ответа Vereb с echo, cat, tr и bc для одного и того же файла:

real   0m0.168s
user   0m0.059s
sys    0m0.115s

Время для ответа Роба Хруски с sed, wc и fgrep для одного и того же файла:

real   0m0.465s
user   0m0.411s
sys    0m0.080s

Время для ответа Джефроми с <=> и <=> для одного и того же файла:

real   0m0.522s
user   0m0.477s
sys    0m0.023s 
echo $(cat <file>  | wc -c) - $(cat <file>  | tr -d 'A' | wc -c) | bc

где A - символ

Время для этой команды с файлом с 4,9 МБ и 1100000 вхождений искомого символа:

real   0m0.168s
user   0m0.059s
sys    0m0.115s

Если вам нужно только сосчитать количество строк, содержащих вашего персонажа, это сработает:

grep -c 'f' myfile

Тем не менее, он считает несколько вхождений 'f' в одной строке как одно совпадение.

tr -d '\n' < file | sed 's/A/A\n/g' | wc -l

Замените два вхождения "A" вашим символом, а "file" - вашим входным файлом.

  • tr -d '\n' < file:удаляет новые строки
  • sed 's/A/A\n/g:добавляет перевод строки после каждого вхождения буквы "А".
  • wc -l:подсчитывает количество строк

Пример:

$ cat file
abcdefgabcdefgababababbbba


1234gabca

$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top